Назад
Вперед
4.2. Ввод символов с клавиатуры в приложениях JDK
1.1
В этом приложении, во многом похожем на
предыдущее, мы демонстрируем способ получения
кодов симолов, набираемых на клавиатуре.
Напомним, что предыдущее приложение отображало в
своем окне виртуальные коды нажимаемых клавиш и
названия этих клавиш.
Исходный текст примера
Архив проекта для Java WorkShop 2.0
Немного теории
Как мы уже рассказывали при описании предыдущего примера, методы
keyPressed, keyReleased и keyTyped интерфейса KeyListener можно
использовать для ввода с клавиатуры. В этом
примере мы заострим ваше внимание на методе keyTyped,
удобном для ввода символов. Эти символы
передаются указанному методу в результате
нажатия символьных клавиш или комбинаций клавиш,
например, <Shift+A>.
Внутри метода keyTyped вам доступен метод getKeyChar,
возвращающий код символа, введенного с
клавиатуры, или значение KeyEvent.CHAR_UNDEFINED, если
нажатой комбинации клавиш не соответствует ни
один символ Unicode.
Заметим, что метод getModifiers позволяет определить
текущее состояние клавиш модификации, таких как
<Shift>, <Control> и <Alt>. Данный метод может
вернуть комбинацию следующих флагов:
Флаг |
Соответствующая клавиша |
ALT_MASK |
<Alt> |
CTRL_MASK |
<Control> |
META_MASK |
<Meta> |
SHIFT_MASK |
<Shift> |
Передав значение, полученной от метода getModifiers,
методу getKeyModifiersText, вы сможете получить текстовую
строку названия нажатой комбинации клавиш
модификации.
Что же касается метода getKeyCode, то его не следует
вызывать из метода keyTyped, так как он в этом случае
будет всегда возвращать значение KeyEvent.VK_UNDEFINED.
Описание примера
Автономное приложение KeyChar отображает в своем
окне введенные символы, а также состояние клавиш
модификации (рис. 1).
Рис. 1. Окно приложения KeyChar
Исходный текст приложения KeyChar во многом
аналогичен исходному тексту предыдущего
приложения KeyInfo, поэтому здесь мы расскажем
только об отличиях.
Метод keyPressed класса FrameWindow
Когда пользователь нажимает клавишу,
управление передается методу keyPressed,
реализованному как часть интерфейса KeyListener:
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode() == KeyEvent.VK_F3)
{
setVisible(false);
System.exit(0);
}
}
При помощи метода getKeyCode мы проверяем
виртуальный код нажатой клавиши. Если он равен
KeyEvent.VK_F3 (то есть соответствует функциональной
клавише <F3>), приложение завершает свою работу.
Метод keyReleased класса FrameWindow
Этот метод реализован в нашем приложении как
ничего не делающая заглушка:
public void keyReleased(KeyEvent e)
{
}
Метод keyTyped класса FrameWindow
Метод keyTyped отображает в окне приложения
очередную строку сообщения с информацией о
введенном с клавиатуры символе и затем
сворачивает это окно на одну строку:
public void keyTyped(KeyEvent e)
{
showKeyboardInfo(e);
lineFeed();
}
Отображение выполняется с помощью метода
showKeyboardInfo, а свертка - с помощью метода lineFeed.
Метод showKeyboardInfo класса FrameWindow
Получив управление, метод showKeyboardInfo получает
ссылку на контекст отображения окна приложения:
Graphics g = getGraphics();
Далее в этом контексте устанавливается шрифт с
фиксированной шириной символов Courier:
g.setFont(new Font("Courier",
Font.PLAIN, 12));
Вслед за этим метод формирует текстовую строку
s, записывая в нее информацию о введенном символе:
s = "Char: " + e.getKeyChar() +
", mod = " + e.getModifiers() +
" (" + e.getKeyModifiersText(
e.getModifiers()) + ")";
Строка отображается в верхней части окна
приложения:
g.drawString(s, 10, 50);
Введенный символ мы получаем при помощи
специально предназначенного для этого метода
getKeyChar. Что же касается состояния клавиш
модификации, то его нетрудно определить методом
getModifiers. Текстовую "расшифровку" нажатой
комбинации клавиш модификации мы получаем
методом getKeyModifiersText.
Назад Вперед |