Обработка события в Java. События Стратегия обработки событий в Java 1.1 Прослушиватель событий – это класс, который реализует интерфейс java.awt.event.EventListener,

Презентация:



Advertisements
Похожие презентации
1 Обработка событий Событие – объект специального класса, описывающий изменение состояния объекта источника. Классы для обработки событий находятся в пакете.
Advertisements

Язык программирования Java Дмитриев Андрей Владиславович 2007.
Идентификация типа во время выполнения RTTI. Механизм состоит из нескольких частей: Базовые средства RTTI лежат в основе механизма полиморфизма. При первом.
Язык программирования Java Дмитриев Андрей Владиславович 2007.
Java: графический интерфейс пользователя. Swing и AWT AWT – Abstract Window Toolkit, единственный инструментарий для визуального интерфейса до 1998 года;
Пользовательский интерфейс. GUI с применением AWT Создание элементов пользовательского интерфейса библиотека AWT (Аbstract Window Toolkit) поручала встроенным.
Кафедра ЮНЕСКО по НИТ Объектная модель в Java Часть 2. Интерфейсы и внутренние классы, параметры метода.
Test 6 Вопрос 1. Как можно уничтожить объект в Java? a)присвоить null всем ссылкам на объект b)вызвать Runtime.getRuntime().gc() c)вызвать метод finalize()
Многопоточные приложения в Java Лекция 8. Многопоточность Многопоточность операционной системы – возможность одновременного выполнения более чем одной.
Лекция 2.Основы объектной модели Java 1. Содержание 1.Основы ООП. 2.Понятия «класс» и «объект». 3.Поля и методы класса. Спецификаторы доступа: public,
Язык программирования Java Дмитриев Андрей Владиславович Май 2007.
Java Advanced Интерфейс пользователя Часть 2. 2 СПбГУ ИТМО Georgiy KorneevJava Advanced / Интерфейс пользователя 2 Содержание 1.События и слушатели 2.Кнопки.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
1 Обработка исключений в Java Одно из важнейших преимуществ Java – разработанный на уровне языка механизм обработки исключений. Исключение в Java - это.
Saint Petersburg, 2011 Java Lecture #06 Exceptions.
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
Обработка исключительных ситуаций. Синтаксис try{ операторы0; } catch (ТипИсключения1 переменная1){ операторы1; } catch (ТипИсключения2 переменная2){
Введение в GUI. Возможности графических библиотек GUI-библиотеки Java (GUI – для standalone applications или applets) AWT – вызов native-компонентов =>
1 Java 13. ЭЛЕМЕНТЫ КОМПОНОВКИ И УПРАВЛЕНИЯ. 2 Элементы управления Компоненты библиотеки Swing не привязаны к конкретной платформе. Классы компонент доступны.
1 Java 6. ИНТЕРФЕЙСЫ И ВНУТРЕННИЕ КЛАССЫ. 2 Интерфейсы Не являются классами Ни один из объявленных методов не может быть реализован внутри интерфейса.
Транксрипт:

Обработка события в Java

События

Стратегия обработки событий в Java 1.1 Прослушиватель событий – это класс, который реализует интерфейс java.awt.event.EventListener, обычно через его наследников. Каждый из интерфейсов требует, чтобы его методы были определены в классе, который будет реализовать эти интерфейсы. Например, интерфейс MouseListener : mouseClicked(MouseEvent e) mouseEntered(MouseEvent e) mouseExited(MouseEvent e) mousePressed(MouseEvent e) mouseReleased(MouseEvent e) В каждый метод передается параметр – некоторый объект класса с именем Event, создаваемый VJM. Все эти классы наследуют от java.awt.Event.

Модель делегирования событий Событие – это объект, который описывает состояние источника. Событие происходит в любом компоненте. Компонент или контейнер, в котором произошло событие, называется источником события. Все события классифицированы. Корень дерева – класс EventObject из java.util. Класс AWTEvent – наследник класса EventObject. java.awt.event javax.swing.event Имена классов-событий – XxxEvent (ActionEvent, MouseEvent, MouseMotionEvent…) При возникновении события исполняющая система Java распознает причину события, создает объект класса, соответствующего этой причине. В этом объекте содержится вся информация о событии и источнике события. Созданный объект передается методам-обработчикам события. Метод-обработчик создает программист, но сигнатуры методов имеют строгое описание в интерфейсах, называемых слушателями. Имена этих интерфейсов имеют вид – XxxListener ( около 40 ). Разработчик реализует выбранный интерфейс с помощью какого-либо класса (ActionListener – ActionPerformed(ActionEvent e)), а затем подсоединяется к источнику события с помощью метода addXxxListener(). removeXххListener() – отключает объект от прослушивания события

public class EventCreator extends JFrame implements ActionListener { JButton btnBook; JButton btnExit; public EventCreator2() throws Exception { try { setBounds(150,200,500,250); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); BorderLayout border = new BorderLayout(); Container content = getContentPane(); content.setLayout(border); btnBook = new JButton("Book"); btnExit = new JButton("Exit"); btnBook.addActionListener(this); btnExit.addActionListener(this); JPanel bottomPanel = new JPanel(); bottomPanel.add(btnBook); bottomPanel.add(btnExit); content.add(bottomPanel, BorderLayout.SOUTH); setVisible(true); }catch(Exception e) { System.out.println("Exception thrown " + e); } } public void actionPerformed(java.awt.event.ActionEvent ae) { if (ae.getActionCommand().equals("Exit")) { System.out.println("Exit was clicked"); } if (ae.getActionCommand().equals("Book")) { System.out.println("Book was clicked"); } } public static void main(String args[]) { try { EventCreator mainWindow = new EventCreator(); }catch(Exception e) { System.out.println("Exception in main " + e); } }

Большинство интерфейсов описывают несколько методов Чтобы не реализовывать все, используют классы- адаптеры, например, MouseAdapter, WindowAdapter Адаптер – абстрактный класс, содержащий пустые реализации методов. От такого класса можно наследоваться и переопределить только те методы, которые нужны для приложения. Адаптеры

слушателя: Интерфейс слушателя w/ adapter Методы интерфейса ActionListener actionPerformed(ActionEvent) AdjustmentListener adjustmentValueChanged(AdjustmentEvent) ComponentListener ComponentAdapter componentHidden(ComponentEvent) componentShown(ComponentEvent) componentMoved(ComponentEvent) componentResized(ComponentEvent) ContainerListener ContainerAdapter componentAdded(ContainerEvent) componentRemoved(ContainerEvent) FocusListener FocusAdapter focusGained(FocusEvent) focusLost(FocusEvent) KeyListener KeyAdapter keyPressed(KeyEvent) keyReleased(KeyEvent) keyTyped(KeyEvent) MouseListener MouseAdapter mouseClicked(MouseEvent) mouseEntered(MouseEvent) mouseExited(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent) MouseMotionListener MouseMotionAdapter mouseDragged(MouseEvent) mouseMoved(MouseEvent) WindowListener WindowAdapter windowOpened(WindowEvent) windowClosing(WindowEvent) windowClosed(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent) ItemListener itemStateChanged(ItemEvent) TextListener textValueChanged(TextEvent) Это не полный список, частично потому, что событийная модель позволяет вам создавать вам свои собственные

Событие, интерфейс слушателя и методы добавления, удаления Компоненты, поддерживающие это событие ActionEvent ActionListener addActionListener( ) removeActionListener( ) JButton, JList, JTextField, JMenuItem и наследованные от них, включая JCheckBoxMenuItem, JMenu и JPopupMenu. AdjustmentEvent AdjustmentListener addAdjustmentListener( ) removeAdjustmentListener( ) JScrollbar и все, что вы создаете, реализуя Adjustable interface. ContainerEvent ContainerListener addContainerListener( ) removeContainerListener( ) ( добавление или удаление компонента) Container и наследованные от него, включая JPanel, JApplet, JScrollPane, Window, JDialog, JFileDialog и JFrame. ComponentEvent ComponentListener addComponentListener( ) removeComponentListener( ) (изменение размеров компонента, положения, перекрытия другим компонентом) Component и наследованные от него, включая JButton, JCanvas, JCheckBox, JComboBox, Container, JPanel, JApplet, JScrollPane, Window, JDialog, JFileDialog, JFrame, JLabel, JList, JScrollbar, JTextArea и JTextField. Все компоненты Swing включают методы addXXXListener( ) и removeXXXListener( ), так что подходящий тип слушателя может быть добавлен и удален для каждого компонента. Вы заметите, что XXX в каждом случае также представляет аргумент метода, например: addMyListener(MyListener m).

Событие, интерфейс слушателя и методы добавления, удаления Компоненты, поддерживающие это событие MouseEvent (для кликов и перемещений) MouseListener addMouseListener( ) removeMouseListener( ) Component и унаследованные. FocusEvent FocusListener addFocusListener( ) removeFocusListener( ) (передача фокуса) Component и унаследованные. WindowEvent WindowListener addWindowListener( ) removeWindowListener( ) Window и унаследованные от него, включая JDialog, JFileDialog и JFrame. ItemEvent ItemListener addItemListener( ) removeItemListener( ) JCheckBox, JCheckBoxMenuItem, JComboBox, JList и все, что реализует ItemSelectable interface. TextEvent TextListener addTextListener( ) removeTextListener( ) Все, что унаследовано от JTextComponent, включая JTextArea и JTextField. KeyEvent KeyListener addKeyListener( ) removeKeyListener( ) Component и унаследованные.

Event.java Event4.java анонимный класс на основе listener Event3.java анонимный класс на основе адаптера Event2.java на основе класса, наследующего от адаптера Event1.java с классом, реализующим интерфейс

Event1.java и Event2.java Обработка события с использованием реализации интерфейса public class MyApplet extends Applet implements MouseListener { … public void init() { addMouseListener(this); } public void mouseEntered(MouseEvent event) { } public void mouseExited(MouseEvent event) { } public void mousePressed(MouseEvent event) { } public void mouseReleased(MouseEvent event) { } public void mouseClicked(MouseEvent event) { } } Обработкa события с использованием вложенного класса, наследника класса- адаптера public class MyApplet extends Applet { … public void init() { this.addMouseListener(new MyMouseAdapter()); … } class MyMouseAdapter extends MouseAdapter{ public void mousePressed(MouseEvent e) { last_x = e.getX(); last_y = e.getY(); }

Event3.java и Event4.java Обработка события с использованием анонимного класса на основе адаптера public class MyApplet extends Applet { … public void init() { this.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { last_x = e.getX(); last_y = e.getY(); } }); … } Обработка события с использованием анонимного класса public class MyApplet extends JApplet { … public void init() { MouseListener ml = new MouseAdapter(){ public void mousePressed(MouseEvent e) { xPrev = e.getX(); yPrev = e.getY(); } … addMouseListener(ml); }

Создание собственного события class MyEvent extends java.util.EventObject { // класс событие protected int id; public static final int START = 0, STOP = 1; public MyEvent(Object source, int id) { super (source); this.id=id; } public int getID() { return id; } } //описание интерфейса слушателя interface MyListener extends java.util.EventListener { public void start_act (MyEvent e); public void stop_act (MyEvent e); } public class Test extends JApplet implements ActionListener, MyListener { JButton button; public void init() { button = new JButton("Click Me"); getContentPane().add(button, BorderLayout.CENTER); button.addActionListener(this); //регистрация слушателя } public void start() { fireEvent(new MyEvent(this,MyEvent.START) ); } public void stop() { fireEvent(new MyEvent(this,MyEvent.STOP) ); } public void actionPerformed(ActionEvent e) { Toolkit.getDefaultToolkit().beep(); } public void start_act (MyEvent e) { System.out.println("Hello "+ e.getID()); } public void stop_act (MyEvent e) { System.out.println("By " "+ e.getID()); ); } public void fireEvent (MyEvent e ) { MyListener lst = this; switch(e.getID()) { case MyEvent.START: lst.start_act (e); break; case MyEvent.STOP: lst.stop_act (e); break; }