所以我必須在Swing中爲我的Java類創建一個簡單的GUI,並且我偶然發現了這個小問題。JMenuItem - 如何弄清楚加速器是否調用動作?
我有以下代碼:
JMenuItem mntmQuit = new JMenuItem("Quit");
mntmQuit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getModifiers() == MouseEvent.BUTTON1_MASK) {
System.out.println("You should fire.");
} else if (e.getModifiers() == MouseEvent.BUTTON2_MASK || e.getModifiers() == MouseEvent.BUTTON3_MASK) {
System.out.println("Why do you fire this event?");
} else {
System.out.println("And how can I catch when the accelerator was used?");
}
}
});
mntmQuit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, 0));
我從來沒有見過使用任何其他鼠標按鈕權當點擊或大於按鈕1,因爲它似乎搖擺看到這個不同,發送一個被調用菜單項一個動作事件,無論按下哪個鼠標按鈕 - 與JButton
相反,除非用鼠標按鈕1單擊,否則不會觸發任何東西。
現在我可以忍受,因爲我可以輕鬆地捕捉鼠標按鈕1並執行操作,但如何捕捉加速器的使用情況?它會觸發動作事件,但我沒有看到任何捕捉它的可能性,因爲它返回「0」作爲修飾符(與除1,2和3之外的其他鼠標按鈕相同)。
有沒有什麼辦法可以告訴JMenuItem
它應該只對鼠標按鈕1做出反應,它是加速器?類似於JButton
的方式嗎?
感謝您的回答,但我不確定是否理解正確。當我檢查e.getModifiers()== KeyEvent.VK_Q'時,它不起作用,我認爲這是因爲'e.getModifiers()'在被加速器觸發時返回0,這使得它與被觸發的事件無法區分通過,讓我們來說,鼠標按鈕4. 編輯:對不起,錯過了你的第一行代碼。也想到這一點,但問題是修改器會與其他鼠標按鈕相比,而不僅僅是加速器,而不是1,2或3。 – user1728176 2013-04-23 19:44:30
@ user1728176請參閱我的編輯。 – Aboutblank 2013-04-23 21:19:04