2010-02-27 144 views
2

當我將setAccelerator()設置爲Control + A或Control + P並運行該程序時,它不檢測按鍵。Java JMenu setAccelerator()問題

下面的代碼:

menuItem = new JMenuItem("About"); 
    menuItem.setActionCommand("About"); 
    menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, Event.CTRL_MASK)); 
    menuItem.setMnemonic(KeyEvent.VK_A); 
    menuItem.addActionListener(this); 
    menu.add(menuItem); 

然後當它按下它應該調用動作監聽:

public void actionPerformed(ActionEvent e) { 

    if(e.getActionCommand().equals("About")) { 

    System.out.println("About"); 

    } 
} 

我運行它在Eclipse在Mac上,如果該事項。

回答

5

Control-A和Control-P都是可能已被攔截的擊鍵,具體取決於您的平臺和取決於鍵盤焦點的內容。 Control-A可能已被攔截並解釋爲「全選」,並且Control-P可能已被攔截並解釋爲「粘貼」。

如果您選擇不常用的按鍵而不是「Control-A」,比如「Control-Shift-A」或「Control-B」,會怎麼樣?下面是一個使用控制移-A,而不是控制-A代碼的修改版本:

menuItem = new JMenuItem("About"); 
menuItem.setActionCommand("About"); 
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, Event.CTRL_MASK | Event.SHIFT_MASK)); 
menuItem.setMnemonic(KeyEvent.VK_A); 
menuItem.addActionListener(this); 
menu.add(menuItem); 

我使用the JMenu demo from the Swing tutorial測試了我自己的系統上這種變化,我發現(完全是你所做的)這注冊可控制-A作爲加速器沒有效果。但是,將Control-Shift-A註冊爲加速器可以很好地工作。

-1

不確定是否會有幫助,但您使用的是Event.CTRL_MASK而不是KeyEvent.CTRL_MASK