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

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

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

2017-12-21 409
Обработка событий мыши на языке 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 приемника событий мыши


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

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...



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

0.014 с.