2013-12-10 37 views
4

問題,我的代碼:一些關於setMnemonic來

public class MenuBar extends JFrame { 

    public MenuBar() { 
     initUI(); 
    } 

    public final void initUI() { 

     JMenuBar menubar = new JMenuBar(); 

     JMenu file = new JMenu("File"); 
     file.setMnemonic(KeyEvent.VK_F); 

     JMenuItem eMenuItem = new JMenuItem("Exit"); 
     JMenuItem oMenuItem = new JMenuItem("Open Another"); 
     eMenuItem.setMnemonic(KeyEvent.VK_E); 
     oMenuItem.setMnemonic(KeyEvent.VK_O); 
     eMenuItem.setToolTipText("Exit application"); 
     oMenuItem.setToolTipText("Open another Window"); 
     eMenuItem.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent event) { 
       System.exit(0); 
      } 
     }); 
     oMenuItem.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       main(null); 
      } 
     }); 

     file.add(eMenuItem); 
     file.add(oMenuItem); 
     menubar.add(file); 

     setJMenuBar(menubar); 

     setTitle("Simple menu"); 
     setSize(300, 200); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    public static void main(String[] args) { 

     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       MenuBar ex = new MenuBar(); 
       ex.setVisible(true); 
      } 
     }); 
    } 
} 

它工作正常,但我有一個關於setMnemonic來的問題。如何使用eMenuItem的助記符來按E,而不是Alt + E?感謝您的幫助! (請不是我離開進口了intentially,爲長度問題)

回答

2

從setMnemonic來的docs

助記符是時的外觀和感覺的 無鼠標修飾符(通常是Alt鍵)相結合的關鍵如果焦點爲 包含在此按鈕的祖先窗口內某處,則將激活此按鈕。

因此,使用setMnemonic來做到這一點是不可能的。

但是,你可以使用JMenuItem已定義的setAccelerator方法,通過一個按鍵像KeyStroke.getKeyStroke('e');

或者,你可以,因爲喬普埃根在評論這個回答指出了使用MenuKeyListener它允許更大的控制權在特定的事件上執行該操作。

+3

[JMenuItem.addMenuKeyListener](http://docs.oracle.com/javase/7/docs/api/javax/swing/JMenuItem.html#addMenuKeyListener%28javax.swing.event.MenuKeyListener%29) –

+1

@JoopEggen補充說,我的答案和相信。 – Sinkingpoint

+0

這隻有在菜單打開後才能使用,不能用於打開菜單,對不對? – quixotrykd

0

我不知道這是否會奏效,但您可以嘗試一下。從這個(http://docs.oracle.com/javase/7/docs/api/constant-values.html#java.awt.event.KeyEvent.VK_E)我們看到VK_E的ASCII綁定是69.這是大寫字母E。要得到一個小e其101,這對應於VK_NUMPAD5。我可能是錯的,但它只是一個猜測。

+0

'KeyEvent.VK_NUMPAD5'根據定義會導致它在數字鍵盤上的5鍵上運行事件... – Sinkingpoint

+0

是真的,但我只是好奇。從邏輯上講,它應該這樣工作.. :) – noMAD