Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Библиотека примеров приложений Java

Оглавление
Коды клавиш

Ввод символов
Аплеты JDK 1.1 и клавиатура
Аплет JDK 1.0 и клавиатура
Мышь в JDK 1.1
Перемещение объектов
Аплет JDK 1.0 и мышь
Регулируем размер изображения
Автономное приложение и мышь

Назад Вперед

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).

pic1.gif (5664 bytes)

Рис. 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.


Назад Вперед

[Назад]