加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在显示之前获取JPopupMenu大小

发布时间:2020-12-15 04:14:41 所属栏目:Java 来源:网络整理
导读:我点击鼠标右键显示JPopupMenu.我希望JPopupMenu的右上角位于点击位置(默认情况下不是左上角).要执行此操作,我需要将X坐标设置为mouseEvent.getX() – popupMenu.getWidth().问题是,在第一次显示弹出窗口之前,其宽度等于0. SSCCE: public class PopupTest2
我点击鼠标右键显示JPopupMenu.我希望JPopupMenu的右上角位于点击位置(默认情况下不是左上角).要执行此操作,我需要将X坐标设置为mouseEvent.getX() – popupMenu.getWidth().问题是,在第一次显示弹出窗口之前,其宽度等于0.

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,200));

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                frame.setVisible(true);
            }
        });
    }
}

解决方法

在显示之前,JPopupMenu的首选大小是多少?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读