Java – get JPopupMenu size before display

I click the right mouse button to display JPopupMenu I want the top right corner of JPopupMenu to be in the click position (not the top left corner by default) To do this, I need to set the X coordinate to mouseevent getX() – popupMenu. getWidth(). The problem is that before the pop-up window is displayed for the first time, its width is equal to 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);
            }
        });
    }
}

Solution

What is the preferred size of JPopupMenu before displaying?

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>