我的JPopupMenu
显示在鼠标右键单击上。我需要JPopupMenu'
右上角的click location
(不是左上角的默认值)。要执行此操作,我需要将X
坐标设置为mouseEvent.getX() - popupMenu.getWidth()
。问题是,弹出式显示首次使用前,它的宽度等于0在显示之前获取JPopupMenu的尺寸
SSCCE:
public class PopupTest2 {
public static void main(String[] a) {
final JFrame frame = new JFrame();
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel panel = new JPanel(new BorderLayout());
panel.setBorder(BorderFactory.createLineBorder(Color.RED));
final JPopupMenu menu = new JPopupMenu();
for (int i = 0; i < 10; i++) {
JMenuItem item = new JMenuItem("Item #"+String.valueOf(i));
menu.add(item);
}
panel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON3) {
// first time works wrong
menu.show(panel, e.getX() - menu.getWidth(), e.getY());
}
}
});
frame.setContentPane(panel);
frame.setUndecorated(true);
frame.setBackground(new Color(50, 50, 50, 200));
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
frame.setVisible(true);
}
});
}
}
什么的首选显示前JPopupMenu的大小? – StanislavL
如果我记得,你可以先打包菜单,然后得到它的首选大小[示例在这里](http://stackoverflow.com/questions/16475417/make-jpopupmenu-display-with-a-certain-bottom-left -coordinate/16475904#16475904) – MadProgrammer
@StanislavL请将您的评论写为答案。 – SeniorJD