Читаем Java 7 полностью

Обработка действий клавиатуры

Событие KeyEvent происходит в компоненте по любой из трех причин:

□ нажата клавиша — идентификатор key_pressed;

□ отпущена клавиша — идентификатор key_released;

□ введен символ — идентификатор key_typed.

Последнее событие возникает из-за того, что некоторые символы вводятся нажатием нескольких клавиш, например заглавные буквы вводятся комбинацией клавиш ^Ый>+<буква>. Вспомните еще <АИ>-ввод в MS Windows. Нажатие функциональных клавиш, например , не вызывает событие key_typed.

Обрабатываются эти события тремя методами, описанными в интерфейсе:

public interface KeyListener extends EventListener{ public void keyTyped(KeyEvent e);

public void keyPressed(KeyEvent e); public void keyReleased(KeyEvent e);

}

Аргумент e этих методов может дать следующие сведения.

Метод e.getKeyChar() возвращает символ Unicode типа char, связанный с клавишей. Если с клавишей не связан никакой символ, то возвращается константа char_undefined.

Метод e.getKeyCode () возвращает код клавиши в виде целого числа типа int. В классе KeyEvent определены коды всех клавиш в виде констант, называемых виртуальными кодами клавиш (virtual key codes), например: vk_f1, vk_shift, vk_a, vk_b, vk_plus. Они перечислены в документации к классу KeyEvent. Фактическое значение виртуального кода зависит от языка и раскладки клавиатуры. Чтобы узнать, какая клавиша была нажата, надо сравнить результат выполнения метода getKeyCode () с этими константами. Если кода клавиши нет, как происходит при наступлении события key_typed, то возвращается значение vk_undefined.

Чтобы узнать, не нажата ли одна или несколько клавиш-модификаторов , , , , надо воспользоваться унаследованным от класса InputEvent методом getModifiers () и сравнить его результат с константами ALT_MASK, ctrl_mask, meta_mask,

SHIFT_MASK. Другой способ применить логические методы isAltDown(), isControlDown ( ),

isMetaDown(), isShiftDown().

Добавим в листинг 15.3 возможность очистки поля ввода tf после нажатия клавиши . Для этого перепишем вложенный класс-слушатель TextMove:

class TextMove implements ActionListener, KeyListener{ public void actionPerformed(ActionEvent ae){ ta.append(tf.getText()+"\n");

}

public void keyPressed(KeyEvent ke){

if (ke.getKeyCode() == KeyEvent.VK ESCAPE) tf.setText("");

}

public void keyReleased(KeyEvent ke){} public void keyTyped(KeyEvent ke){}

}

Упражнение

3. Реализуйте обработку нажатия различных клавиш.

Событие TextEvent

Событие TextEvent происходит только по одной причине — изменению текста — и отмечается идентификатором text_value_changed.

Соответствующий интерфейс имеет только один метод:

public interface TextListener extends EventListener{ public void textValueChanged(TextEvent e);

От аргумента e этого метода можно получить ссылку на объект-источник события методом getSource (), унаследованным от класса EventObj ect, например, так:

JTextComponent tc = (JTextComponent)e.getSource();

String s = tc.getText();

// Дальнейшая обработка

Событие изменения ChangeEvent

Еще одно событие общего характера ChangeEvent происходит при изменении состояния компонента Swing: щелчке кнопкой мыши на кнопке Swing любого типа, выборе пункта меню, движении ползунка и "градусника", смене страниц на панели с вкладками. Большинство этих компонентов реагируют на собственные события, более удобные для обработки, но для окна выбора цвета JColorChooser и ползунка JSlider это основное событие.

Поскольку событие класса aangeEvent носит такой общий характер, в этом классе нет собственных методов, только унаследованный метод getSource ( ).

Слушатель этого события changeListener обладает всего одним методом:

public void stateChanged(ChangeEvent);

При обработке события следует получить ссылку на источник и извлечь из него всю необходимую информацию, например:

import javax.swing.event.*;

class SliderHandler implements ChangeListener{

private int threshold; private JLabel l;

public SliderHandler(int threshold, JLabel l){ this.threshold = threshold; this.l = l;

}

public void stateChanged(ChangeEvent e){

JSlider sl = (JSlider)e.getSource(); if (!sl.getValueIsAdjusting())

if (threshold <= (int)sl.getValue()) l.setText("Порог достигнут");

}

}

Обработка действий с окном

Событие WindowEvent может произойти по двенадцати причинам:

□ окно открылось — идентификатор window_opened;

□ окно закрылось — идентификатор window_closed;

□ попытка закрытия окна — идентификатор window_closing;

□ окно получило фокус — идентификатор window_activated;

□ процесс получения фокуса — идентификатор window_gained_focus;

□ окно потеряло фокус — идентификатор window_deactivated;

□ процесс потери фокуса — идентификатор window_lost_focus;

□ окно свернулось в ярлык — идентификатор window_iconified;

Перейти на страницу:

Все книги серии В подлиннике

Java 7
Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др. Дано подробное изложение последней версии сервлетов, технологии JSP и библиотек тегов JSTL. Около двухсот законченных программ иллюстрируют рассмотренные приемы программирования. Приведена подробная справочная информация о классах и методах Core Java API.

Ильдар Шаукатович Хабибуллин

Программирование, программы, базы данных

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных