Событие KeyEvent происходит в компоненте по любой из трех причин:
- нажата клавиша — идентификатор KEY_PRESSED;
- отпущена клавиша — идентификатор KEY_RELEASED;
- введен символ — идентификатор KEYJTYPED.
Последнее событие возникает из-за
того, что некоторые символы вводятся нажатием нескольких клавиш, например, заглавные
буквы вводятся комбинацией клавиш
Обрабатываются эти события тремя методами, описанными в интерфейсе:
public interface KeyListener extends EventListener{
public void keyTyped(KeyEvent e);
public void keyPressed(KeyEvent e);
public void keyReleased(KeyEvent e);
}
Аргумент е этих методов может дать следующие сведения.
Метод e.getKeyChar() возвращает символ Unicode типа char, связанный с клавишей. Если с клавишей не связан никакой символ, то возвращается константа CHAR_UNDEFINED.
Метод e. getKeyCode () возвращает код клавиши в виде целого числа типа int. В классе KeyEvent определены коды всех клавиш в виде констант, называемых виртуальными кодами клавиш (virtual key codes), например, VK_FI, VK_SHIFT, VK_A, VK_B, VK_PLUS. Они перечислены в документации к классу KeyEvent. Фактическое значение виртуального кода зависит от языка и раскладки клавиатуры. Чтобы узнать, какая клавиша была нажата, надо сравнить результат выполнения метода getKeyCode () с этими константами. Если кода клавиши нет, как происходит при наступлении события KEY_TYPED, то возвращается значение VK_UNDEFINED.
Чтобы узнать, не нажата ли одна
или несколько клавиш-модификаторов
Добавим в листинг 12.3 возможность
очистки поля ввода tf после нажатия клавиши
class TextMove implements ActionListener, KeyListener{
public void actionPerformed(ActionEvent ae){
ta.append{tf .getText 0+"\n");
}
public void keyPressed(KeyEvent ke) {
if (ke.getKeyCodeO == KeyEvent.VK_ESCAPE) tf.setText("");
}
public void keyReleased(KeyEvent ke){)}
public void keyTyped(KeyEvent ke){}
}