2015-10-06 197 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); 

    } 
} 

真正的问题是,你是尝试使用功能键执行与使用数字键相同的功能。只要输入密钥,就不需要使用功能键模拟键的键入。