2010-10-04 35 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

相關問題