2010-10-04 41 views
1

当我让弹出一个JPopupMenu而不通过“调用者组件”时,菜单不起作用:子菜单不会打开并且不会重新绘制。但是当我用JLabel创建一个完全无用的JFrame时,我通过JLabal作为调用者,它可以正常工作...Java:在不传递调用者组件的情况下显示JPopupMenu

任何建议,如何避免创建无用的框架。而我的应用程序确实没有打开任何框架,只需弹出一个简单的菜单即可。

JPopupMenu.show(null, xOnTheScreen, yOnTheScreen); // Doesn't work 
JPopupMenu.show(aStupidJLabelInAStupidJFrame, x, y); // Works 

感谢

+1

你的摇摆应用必须至少在某些JPanel中。不是吗? – 2010-10-04 12:47:38

+0

如果您使用弹出式菜单作为桌面托盘图标的弹出窗口,则您将没有组件用于调用者参数。我记得有一个类似的问题。 – Durandal 2010-10-04 19:11:40

回答

1

看看JPopupMenu源代码,你会看到你为什么要设置一个调用。

显示一个没有任何现有组件的弹出式菜单,与浏览器的弹出窗口在同一联盟中的可用性非常差。

为什么不能使用JComponent#setComponentPopupMenu,或者在要显示弹出式菜单的组件中添加鼠标监听器?

+0

我已经看了一下代码,但看不出原因... – 2010-10-04 16:17:22

+0

在JDK6中搜索'JPopupMenu#getInvoker',你会看到一大堆引用。改变这种基本行为和假设并不是一个好主意。 – 2010-10-04 16:48:24

相关问题