Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 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; просмотров: 186; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.117.109 (0.009 с.) |