Обработка событий мыши на языке Java, используя классы адаптеров — КиберПедия 

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Обработка событий мыши на языке Java, используя классы адаптеров

2017-12-21 431
Обработка событий мыши на языке Java, используя классы адаптеров 0.00 из 5.00 0 оценок
Заказать работу

Классы адаптеров упрощают обработку событий, поскольку уже наследуют интерфейсы событий и реализуют обработчики по умолчанию. Классы адаптеров ComponentAdapter, ContainerAdapter, FocusAdapter, KeyAdapter, MouseAdapter, MouseMotionAdapter и WindowAdapter реализуют соответственно интерфейсы прослушивания событий ComponentListener, ContainerListener, FocusListener, KeyListener, MouseListener, MouseMotionListener и WindowListener. Для использования класса адаптера необходимо создать новый класс объекта приёмника, который наследует требуемый класс адаптера. В созданном классе можно переопределить требуемые обработчики интерфейса. Остальные обработчики могут быть оставлены без внимания, поскольку они уже реализованы в наследуемом классе адаптера. Затем создаются объект-источник события и объект нашего нового класса с переопределённым в нём нужным обработчиком. И, наконец, к объекту источнику его функция add Type Listener () добавляет объект приёмника. Из примера 9.5.3.1 видно, насколько упрощается программа. Сравните варианты 5 и 6 примера 9.5.3.1 с вариантом 4 примера 9.5.2. В классе Listener теперь отпала необходимость обязательной реализации всех обработчиков интерфейса MouseListener. Класс Listener упростился, но наследование класса MouseAdapter дозволяет для этого класса Listener теперь наследование только интерфейсов.

Программу можно ещё упростить, применив внутренние или анонимные классы, о чём рассказано в разделе 9.5.4.

 

Пример 9.5.3.1. Обработка событий мыши на Java, используя классы адаптеров.

///////////////

// Java и J# Вариант 5

import java.awt.*;

import java.awt.event.*;

 

class Listener extends MouseAdapter

{

// Выполнить предопределённый обработчик mousePressed мыши

Public void mousePressed (MouseEvent mE)

{

System.out.println ("Mouse: x= " + mE.getX ()

+ " y= " + mE.getY());

}

}

 

// Класс прикладного окна

class MainClass extends Frame

{

public MainClass ()

{

Listener ls= new Listener ();

this.setSize (400, 200);

this.setTitle ("Hello");

this.addMouseListener(ls);

}

 

public static void main () // Главная функция

{

MainClass mC= new MainClass ();

mC.show ();

}

}

 

///////////////

// Java и J# Вариант 6

import java.awt.*;

import java.awt.event.*;

 

class Listener extends MouseAdapter

{

// Выполнить предопределённый обработчик mousePressed мыши

Public void mousePressed (MouseEvent mE)

{

System.out.println ("Mouse: x= " + mE.getX ()

+ " y= " + mE.getY());

}

}

 

// Класс прикладного окна

class MainClass extends Frame

{

public MainClass ()

{

this.setSize (400, 200);

this.setTitle ("Hello");

this.addMouseListener (new Listener ());

}

 

public static void main () // Главная функция

{

MainClass mC= new MainClass ();

mC.show ();

}

}

/*

Result:

При каждом нажатии на клавишу мыши в прикладном окне выдаётся на консоль строка вида

Mouse: x= 10 y= 55, где x, y - координаты носика мыши

*/

Java и J#. Если бы в вариантах 5 и 6 программы класс Listener приёмника наследовал интерфейс MouseListener, то пришлось бы описать в классе все интерфейсные функции этого интерфейса, поскольку наследование интерфейса требует это. То есть поступить так, как в примере 9.5.2. Но класс Listener примера 9.5.3.1 наследует класс MouseAdapter адаптера, который наследует интерфейс MouseListener и уже реализовал все его интерфейсные функции по умолчании. Это позволило переопределить в классе Listener только нужную нам функцию mousePressed().

Подписка на событие мыши в вариантах 5 и 6 отличается. В варианте 5 в теле конструктора MainClass() создаётся объект ls приёмника (слушателя) в куче, и функция addMouseListener использует эту ссылку ls. В варианте 6 ссылка автоматически создаётся в качестве аргумента в результате создания объекта приёмника класса Listener.

 

 

Обработка событий мыши на языке Java, используя внутренние классы адаптеров и анонимные классы

 

Классы языков программирования C++/CLI, C# и Java позволяют описывать и использовать внутри себя другие классы, которые называются внутренними классами. В программе примера 9.5.4.1 внутри класса MainClass источника описан внутренний класс Listener приёмника, наследующий класс MouseAdapter адаптера. Конструктор класса MainClass с помощью функции addMouseListener() присоединяет приёмник к источнику.

 

Пример 9.5.4.1. Обработка событий мыши на Java, используя внутренние классы адаптеров.

///////////////

// Java и J# Вариант 7

import java.awt.*;

import java.awt.event.*;

 

// Класс прикладного окна

public class MainClass extends Frame

{

public MainClass ()

{

this.setSize (new Dimension (400, 200));

this.setTitle ("Hello");

this.addMouseListener(new Listener ());

}

 

// Внутренний класс Listener приемника событий мыши


Поделиться с друзьями:

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.015 с.