如何获取JPopupMenu的尺寸?

5
我有一个带有附加JPopupMenuTrayIcon。当我向弹出菜单添加JMenuItem时,我想知道这个弹出菜单的尺寸。但是,无法计算尺寸:getBounds()getSize()getVisibleRect()都返回零乘零的尺寸。

如您在图像中所见,弹出菜单肯定具有尺寸。
Tray Popup Menu
现在我该如何获取弹出菜单的尺寸?

3个回答

5

组件在被实现之前没有大小。这基本上意味着在它们变得可见(或打包)之前没有大小。

为什么这很重要,系统负责定位菜单?如果我们知道需求,也许可以提供更好的解决方案。

如果您想尝试一种方法,请使用PopupMenuListener并处理popupMenuWillBecomeVisible()事件。然后,您需要将您的代码包装在SwingUtilities.invokeLater()中,以便代码在菜单可见后执行。


0

我研究这个是因为我想用JPopupMenu代替AWT PopupMenu作为我的TrayIcon。由于JPopupMenu没有pack()方法,上面的方法当然可以使用。 如果只是一个简单的菜单而没有大量的图形负载,你可以通过在添加菜单后简单地使菜单可见一小段时间来欺骗系统:
myjPop.setVisible(true);
myjPop.setVisible(false);
之后你就有了菜单的大小。 这不是最好的解决方案,但它很简单并且能够解决问题。


0

我有另一种解决这个问题的方法。您可以两次调用show()方法。

在第一次调用该方法后,维度属性将被初始化,第二次在所需位置显示弹出菜单。以下是一个示例:

我想将菜单显示在按钮旁边,为此我需要知道popmenu的宽度 enter image description here

如果我在第一次调用中调用menu.getWidth(),它将返回0,在第一次调用之后,它将返回弹出菜单占用的值;

int firstX = refreshButton.getLocation().x;
int firstY = refreshButton.getLocation().y;
menu.show(toolBar, firstX, firstY);
menu.show(toolBar, firstX -  menu.getWidth(), firstY);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接