
- •9. Библиотека .Net Framework и библиотеки языка Java
- •9.1. Приложение
- •9.2. Классы, объекты и элементы приложения
- •9.3. Простейшие приложения
- •9.4. Сообщения Windows, события и делегаты
- •9.4.1. Обработка событий мыши на языке c#
- •9.4.3. Обработка событий мыши на языке Java с использованием предопределённого обработчика mouseDown
- •9.4.4. Связь события с несколькими объектами на языке c#
- •Ещё раз о событиях и уведомлении в языке Java
- •9.5.1. Обработка событий элементов интерфейса пользователя в языке Java
- •Обработка событий мыши на языке Java, используя интерфейс MouseListener
- •9.5.3. Обработка событий мыши на языке Java, используя классы адаптеров
- •9.5.4. Обработка событий мыши на языке Java, используя внутренние классы адаптеров и анонимные классы
- •9.5.5. Обработка события закрытия окна
- •Графика
- •9.6.1. Графические объекты
- •Прямоугольник
- •Класс Pen
- •Класс SolidBrush
- •Класс Font
- •Класс Graphics
- •9.7. Событие Paint и его обработчик
- •9.8. Управляющие элементы
- •Класс Button
- •Классы TextBox и TextField
- •Классы UserControl и Panel
- •9.9. Дочерние окна
- •9.10. Исключения
9.5.4. Обработка событий мыши на языке 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 приемника событий мыши
class Listener extends MouseAdapter
{
// Выполнить предопределённый обработчик 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, y - координаты носика мыши
*/
В программах языка Java для обработки событий широко применяется анонимный класс, который не имеет имени, поскольку объект этого класса используется в конкретном контексте один раз, то есть, нет необходимости объявлять для него ссылку, так как этот объект более нигде не применяется.
В программе примера 9.5.4.2 в качестве аргумента используется не ссылка на объект класса приёмника как в примере 9.5.4.1, а описан особым образом анонимный класс. Конструкция параметра функции addMouseListener() вида
new MouseAdapter ( )
{. . .}
указывает компилятору о том, что имеет место анонимный класс. Компилятор создаёт объект анонимного класса MouseAdapter и передаёт его в качестве аргумента в функцию addMouseListener(). Как видим в примере 9.5.4.2, анонимные классы упрощают программу.
Пример 9.5.4.2. Обработка событий мыши на Java, используя внутренний анонимный класс.
///////////////
// Java и J# Вариант 8
import java.awt.*;
import java.awt.event.*;
// Класс прикладного окна
class MainClass extends Frame
{
public MainClass ( )
{
this.setSize (400, 200);
this.setTitle ("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, y - координаты носика мыши
*/