2015-10-06 199 views
2

我有F鍵(F1,F2等)的問題。我想爲F鍵添加動作,我想在一個事件中處理所有動作。這就是爲什麼我想使用getActionCommand方法,但它總是返回null。但是,如果我使用numpad鍵,它的工作原理如下。由於爲什麼ActionEvent.getActionCommand()返回null?

不工作的代碼使用F鍵: 代碼:

private void setKeyBindings() { 
    AbstractAction numberAction = new AbstractAction() { 
     @Override 
     public void actionPerformed(ActionEvent ae) { 
      System.out.println(ae.getActionCommand()); 
     } 
    }; 

    InputMap inputMap = this.editButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); 

    for (int i = 1; i < 13; i++) 
    { 
     String text = String.valueOf(i); 

     inputMap.put(KeyStroke.getKeyStroke("F" + text), text); 
     this.editButton.getActionMap().put(text, numberAction); 
    } 
} 

工作小鍵盤代碼:

private void setKeyBindings() { 
    AbstractAction numberAction = new AbstractAction() { 
     @Override 
     public void actionPerformed(ActionEvent ae) { 
      System.out.println(ae.getActionCommand()); 
     } 
    }; 

    InputMap inputMap = this.editButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); 

    for (int i = 0; i < 10; i++) 
    { 
     String text = String.valueOf(i); 

     inputMap.put(KeyStroke.getKeyStroke("NUMPAD" + text), text); 
     this.editButton.getActionMap().put(text, numberAction); 
    } 
} 
+0

這就是爲什麼我建議使用一種可重複使用的操作,該操作使用每個鍵所需的值/信息播種;) – MadProgrammer

回答

4

我想用getActionCommand方法,但它始終返回null

功能鍵不會產生交流電haracter。

如果你想知道當你使用功能鍵或不產生其他的字符鍵按下哪個鍵,那麼你需要更大膽一點:

class SimpleAction extends AbstractAction 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     EventQueue queue = Toolkit.getDefaultToolkit().getSystemEventQueue(); 
     KeyEvent ke = (KeyEvent)queue.getCurrentEvent(); 
     String keyStroke = ke.getKeyText(ke.getKeyCode()); 
     String number = keyStroke.substring(1); 
     System.out.println(number); 

    } 
} 

真正的問題是,你是嘗試使用功能鍵執行與使用數字鍵相同的功能。只要輸入密鑰,就不需要使用功能鍵模擬鍵的鍵入。