ТОП 10:

Слушатели в шаблоне обработки событий «Наблюдатель». Типы слушателей.



Слушатели

Событие (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; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.235.30.155 (0.006 с.)