Search code examples
javaswingdimensionjpopupmenu

How to get the dimension of a JPopupMenu?


I have a TrayIcon with a JPopupMenu attached to it. When I add a JMenuItem to the popup menu, I want to know the dimension of this popup menu. But the dimension is not calculated: getBounds(), getSize() and getVisibleRect() all return zero-by-zero dimensions.

As you can see in the image, the popup menu certainly has a dimension.
Tray Popup Menu
Now how can I get the dimension of the popup menu?


Solution

  • Components don't have a size until they have been realized. Which basically means until they have been made visible (or packed).

    Why is this important, the system looks after positioning the menu? If we know the requirement maybe we can provide a better solution.

    If you want a hack then try using PopupMenuListener and handle the popupMenuWillBecomeVisible() event. Then you will need to wrap your code in a SwingUtilities.invokeLater() so the code executes after the menu is visible.