Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Слушатели в шаблоне обработки событий «Наблюдатель». Типы слушателей.Содержание книги
Поиск на нашем сайте Слушатели Событие (event) в пользовательском интерфейсе — это либо непосредственное действие пользователя (щелчок или движение мыши, нажатие клавиши), либо изменение состояния какого-либо компонента интерфейса (например, щелчок мыши может привести к нажатию кнопки). Источником события (event source) в Swing может быть любой компонент, будь то кнопка, надпись с текстом или диалоговое окно. Для того чтобы узнавать в своей программе о происходящих в компоненте событиях, нам необходимо сообщить компоненту о своей заинтересованности. Сделать это можно, передав компоненту слушателя (listener) определенного события . Слушатель — этот тот самый наблюдатель (разница только в названиях), которому компонент будет сообщать о происходящих в нем событиях Каждому типу события соответствует свой слушатель. Так гораздо проще следить именно за теми событиями, что нас интересуют, а не за всеми подряд — код, обрабатывающий щелчки мыши, будет отделен от кода, ответственного за нажатия клавиш. Обязанности слушателей (то есть методы, которые в них должны быть определены) описаны в соответствующих интерфейсах. Вы реализуете в своем классе нужный вам интерфейс слушателя, передаете его в интересующий вас компонент и спокойно ждете наступления события. Давайте рассмотрим простой пример, в котором мы попытаемся узнать о нажатиях клавиш при активном окне.Надо сказать, что события в Java условно разделяются на низкоуровневые (low-level events) и высокоуровневые (high-level events). К низкоуровневым событиям относят те, что происходят непосредственно в результате действий пользователя: это движения мыши, передача фокуса ввода от одного приложения другому, нажатия клавиш и т. п. Они поступают в Java-программу от операционной системы или от внутренних механизмов виртуальной машины. Высокоуровневые события происходят в результате изменения состояния компонента. Такие события поступают не от операционной системы, а создаются самим компонентом. Процесс создания события еще называют запуском (fire). Во многих компонентах Swing вы можете увидеть методы с именами вида fireXXX(); именно в таких методах создаются объекты с информацией о событиях, которые затем рассылаются слушателям. Часто события высокого уровня возникают после того, как происходят несколько событий низкого уровня (например, кнопка сообщает о своем нажатии, после того как над ней была нажата и отпущена кнопка мыши).
События от нажатия клавиш клавиатуры. Пример использования. Прежде всего необходимо написать класс, реализующий интерфейс слушателя. Если вы просмотрите интерактивную документацию Java, то увидите, что для получения информации о нажатиях клавиш используется интерфейс KeyListener, именно его мы и реализовали в классе KeyL. В этом интерфейсе определены три метода, каждый из которых вызывается при наступлении определенного события:keyPressed() и keyReleased() — при нажатии и отпускании клавиши, keyTyped() — при печати символа (когда нажимается и отпускается клавиша, соответствующая печатному символу12). Как параметр каждому методу передается объект KeyEvent, который используется для получения дополнительной информации о событии (кода клавиши, источника события и т. д.). Чтобы сделать программу максимально простой, мы просто передаем эту информацию в стандартный поток вывода.Последний этап — регистрация нашего слушателя в интересующем нас компоненте. Компонент у нас в программе только один — это наше окно. Для регистрации слушателя событий от клавиатуры мы вызываем метод addKeyListener(), в который передаем ссылку на объект класса KeyL. После этого остается только запустить программу и посмотреть, какие сообщения она выводит в стандартный поток вывода при, нажатиях клавиш (конечно, события от нажатий клавиш будут возникать только при активном окне). // FirstEvents.java // События - нажатия клавиш на клавиатуре import javax.swing.*; import java.awt.event.*; public class FirstEvents extends JFrame { FirstEvents() { super("FirstEvents"); // при закрытии окна - выход setDefaultCloseOperation(EXIT_ON_CLOSE); // регистрируем нашего слушателя addKeyListener(new KeyL()); // выводим окно на экран setSize(200, 200); setVisible(true); } public static void main(String[] args) {new FirstEvents(); } } // этот класс будет получать извещения о событиях class KeyL implements KeyListener { // печать символа public void keyTyped(KeyEvent k) { System.out.println(k); } // нажатие клавиши public void keyPressed(KeyEvent k) { System.out.println(k); } // отпускание нажатой клавиши public void keyReleased(KeyEvent k) {System.out.println(k); }} 5) События по работе с мышью. Пример использования.
// LowLevelEvents.java // Наблюдение за основными низкоуровневыми событиями import javax.swing.*; import java.awt.event.*; public class LowLevelEvents extends JFrame {LowLevelEvents() {super("LowLevelEvents"); // при закрытии окна - выход setDefaultCloseOperation(EXIT_ON_CLOSE);// добавим текстовое поле getContentPane().add(new JScrollPane(out = new JTextArea()));// и кнопку JButton button = new JButton("Источник событий"); getContentPane().add(button, "South"); // регистрируем нащего слушателя OurListener ol = new OurListener(); button.addKeyListener(ol); button.addMouseListener(ol); button.addMouseMotionListener(ol);button.addFocusListener(ol); // выводим окно на экран setSize(400, 300); setVisible(true);} // сюда мы будем выводить информацию JTextArea out; // внутренний класс - слушатель событий class OurListener implements MouseListener, KeyListener, MouseMotionListener, MouseWheelListener, FocusListener {public void mouseClicked(MouseEvent e) { out.append(e.toString() + "\n"); } public void mousePressed(MouseEvent e) { out.append(e.toString() + "\n"); } public void mouseReleased(MouseEvent e) { out.append(e.toString() + "\n"); } public void mouseEntered(MouseEvent e) { out.append(e.toString() + "\n"); } public void mouseExited(MouseEvent e) { out.append(e.toString() + "\n"); } public void keyTyped(KeyEvent e) { out.append(e.toString() + "\n"); } public void keyPressed(KeyEvent e) { out.append(e.toString() + "\n"); } public void keyReleased(KeyEvent e) { out.append(e.toString() + "\n"); } public void mouseDragged(MouseEvent e) { out.append(e.toString() + "\n"); } public void mouseMoved(MouseEvent e) { out.append(e.toString() + "\n"); } public void focusGained(FocusEvent e) { out.append(e.toString() + "\n"); } public void focusLost(FocusEvent e) { out.append(e.toString() + "\n"); } public void mouseWheelMoved(MouseWheelEvent e) { out.append(e.toString() + "\n"); }} public static void main(String[] args) {new LowLevelEvents();}}
|
||
|
Последнее изменение этой страницы: 2017-02-10; просмотров: 278; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.007 с.) |