2016-08-01 4 views
0

Я пытаюсь изучить ключевые слова, переписывая проблемы из своей книги, которые я ранее решил с помощью KeyListener. Проблема, которую я пытаюсь решить с помощью keybinds, требует, чтобы я записывал введенное сообщение и отображал его на панели.Java Swing: KeyBinding для события KEY_TYPED

Способ, которым он был разрешен с помощью KeyListener, - это просто запись символов с помощью юникодов с использованием метода keyTyped() и клавиш модификатора/не-Unicode чтения с keyPressed. Если KeyEvent.VK_ENTER соответствует коду ключа из keyevent, он отображает строку на панели.

~~~~~~~~

Я подумал, что она может быть решена таким же образом, с KeyBinds. В документах KeyEvent говорится, что KeyEvent.KEY_TYPED запускается каждый раз, когда вводится символ. Я предположил, что это означает, что каждый символ с соответствующим Unicode вводится так, как он работает в KeyListener.

Позже я понял, что понятия не имею, как получить символ, поскольку учебник Oracle по KeyBinds говорит, что KeyEvent потребляется при вызове actionPerformed().

Это код, который я думал, что позволит мне записать типизированных ключи к StringBuilder с помощью комбинации клавиш:

getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.KEY_TYPED, 0), "recordTypedKey"); 
getActionMap().put("recordTypedKey", addCharToString); 

Есть ли способ, чтобы получить символы, которые будет ссылаться keyTyped KeyListener в() метод, кроме добавления ключ к каждому из них и использование отдельного события Action для их записи?

+0

Привязки клавиш используются для отображения конкретный KeyStroke к Action. Я бы не использовал привязки клавиш для прослушивания всех возможных KeyStrokes. 'Проблема, которую я пытаюсь решить с помощью keybinds, требует, чтобы я записывал сообщение, которое было напечатано' - возможно, вы должны использовать 'DocumentListener'. Этот слушатель может быть добавлен в «Документ» любого текстового компонента. – camickr

ответ

2

Есть ли способ получить символы, которые будут ссылаться на метод keyTyped() KeyListener, помимо добавления ключа к каждому из них и использования отдельного события Action для их записи?

Я не верю, что есть глобальная KeyStroke вы можете перейти к InputMap, который будет работать похож на KeyListener, а сочетания клавиш работают на индивидуальной основе ключа. Тем не менее вы можете создать одно действие и связать с ним ключи, перейдя по значениям символов, которые вы хотите обработать, - в реализации ActionListener вы можете получить значение ключа через getActionCommand. Например, чтобы иметь дело с аз:

AbstractAction action = new AbstractAction(){ 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     System.out.println(e.getActionCommand()); 
    } 

}; 
//loop over the ascii char values 
for (char a = 'A'; a <= 'Z'; a++){ 
    panel.getInputMap().put(KeyStroke.getKeyStroke(Character.toString(a)), "recordTypedKey"); 
} 
panel.getActionMap().put("recordTypedKey", action); 

Вы можете добавить модификаторы, если это необходимо ... например, чтобы иметь дело с клавишей переключения (например, верхний регистр),

panel.getInputMap().put(KeyStroke.getKeyStroke("shift " + Character.toString(a)), "recordTypedKey"); 
Смежные вопросы