Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев_С++_CLI_C#_Java_J#.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.17 Mб
Скачать

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

классы адаптеров и анонимные классы

Классы языков программирования C++/CLI, C# и Java позволяют описывать

и использовать внутри себя другие классы, которые называются внутренни-

ми классами. В программе примера 10.5.4.1 внутри класса MainClass источ-

ника описан внутренний класс Listener приёмника, наследующий класс MouseAdapter

адаптера. Конструктор класса MainClass с помощью функции add-

MouseListener() присоединяет приёмник к источнику.

Пример 10.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));

thls.setTitle ("Hello");

this.addMouseListener(new Listener ( )); >

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

class Listener extends MiouseAdapter

{

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

public void mousePressed (MouseEvent mE)

{

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

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

>

>

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

{

MainClass mC= new MainClass ( );

mC.show ();

>

/>*

Result:

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

строка вида

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

*/

В программах языка Java для обработки событий широко применяется ано-

нимный класс, который не имеет имени, поскольку объект этого класса ис-

пользуется в конкретном контексте один раз, то есть, нет необходимости

объявлять для него ссылку, так как этот объект более нигде не применяется.

В профамме примера 10.5.4.2 в качестве аргумента используется не ссылка

на объект класса приёмника как в примере 10.5.4.1, а описан особым образом

анонимный класс. Конструкция параметра функции addMouseListener() вида

new MouseAdapter ()

{. • •>

указывает компилятору о том, что имеет место анонимный класс. Компиля-

тор создаёт объект анонимного класса MouseAdapter и передаёт его в качест-

ве аргумента в функцию addMouseListener(). Как видим в примере 10.5.4.2,

анонимные классы упрощают программу.

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

ний анонимный класс.

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

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

Importjava.Awt.*;

Import java.Awt.Event.*;

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

class MainClass extends Frame

{

public MainClass ()

{

this.setSlze (400, 200);

this,setTitfe ("Hello");

// Примененить внутренний анонимный класс

this.addMouseListener (new MouseAdapter ( )

{

public void mousePressed (MouseEvent mE)

{

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

+ " y= " + mE,getY( )); >

});

>

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

{

MainClass mC= new MainClass ();

mC.show ();

>

/>*

Result:

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

строка вида

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

*/

10.5.5. Обработка события закрытия окна

Применим класс WindowAdapter адаптера для обработки события закрытия

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

крытия окна. Это возникает в тех случаях, когда событие закрытия окна не

обрабатывается. Два варианта программы, приведённЫе в примере I0.5.5.I,

используют наш класс OurWindowAdapter адаптера окна, наследующий класс

WindowAdapter адаптера, и анонимный класс.

Пример 10.5.5.1. Обработка события закрытия окна.

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

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