2017-09-26 82 views
0

我想捕捉事件,當用戶點擊TestSuite並動態添加一些MenuItems。添加單擊事件處理程序到JMenu

JMenu menu5 = new JMenu("TestSuite"); 

如何在Java Swing上做到這一點?我可以通過添加addActionListener(this)來捕獲所有JMenuItem點擊事件。但是這次不是JMenuItem,它是JMenu。

+0

(1-)'當用戶點擊TestSuite並動態添加一些MenuItems .' - 這是一個糟糕的設計。你怎麼知道用戶何時想「添加一些MenuItems」或者他們是否想顯示彈出式菜單?也許第一個菜單項應該是「添加更多...」菜單項。 – camickr

+0

這是一個完全合乎邏輯的問題。不要認爲它是「添加」菜單項,Marcus很可能想要根據當時的狀態來動態地創建菜單的內容。他使用「添加」可能是對問題的簡化。 –

+0

@BillK,是的,我看你是否完全「重建」菜單,每次這是合理的。無論如何,我的評論是針對「添加」的規定。 – camickr

回答

-3

您可以使用ActionListener接口,就像在JButton上添加事件一樣。

menu5.addActionListener(this); 

其中「this」是在上面的示例中實現ActionListener接口的類的引用,它是相同的類。

添加你可以使用menu5.add(新菜單項(「菜單物品1」))

+0

(1-)您可以將ActionListener添加到JMenuItem,但不添加到JMenu。 – camickr

+0

你是多麼愚蠢。去檢查java doc –

+1

'你是多麼愚蠢。去檢查java doc' - 我想我應該更清楚。您可以將ActionListener添加到JMenu,但是當您單擊菜單時,不會調用偵聽器。這就是OP在問這個問題的原因。他們特別聲明ActionListener爲JMenuItem工作,但不是JMenu。 – camickr

2

您可以將MenuListener添加到JMenu和監聽menuSelected事件菜單。這將允許您在彈出窗口可見之前動態地添加/刪除菜單項到菜單。

+0

如果他們使用加速鍵,添加鼠標偵聽器將失敗。 –

+0

@BillK你不能將加速器添加到菜單中,我認爲你的意思是「nomomics」。在這種情況下,MenuListener將被調用。正如我所建議的,您需要根據實際需求選擇解決方案。菜單的設計不是以這種方式使用。 – camickr

+0

許多程序根據狀態添加和刪除菜單項......僅僅因爲您沒有遇到一組要求,您可能不應該認爲它們無效。 –

相關問題