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

Рабочий код Numpad:

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, но он всегда возвращает нулевое

Функциональные клавиши не генерируют ac 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); 

    } 
} 

Реальная проблема заключается в том, что вы пытаясь использовать функциональные клавиши для выполнения той же функции, что и просто с помощью цифровой клавиши. Я не вижу необходимости использовать функциональный ключ для имитации ввода ключа, когда вы можете просто ввести ключ.

Смежные вопросы