
- •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. Исключения
Обработка событий мыши на языке Java, используя интерфейс MouseListener
Из предыдущего раздела явствует, что для подписки приёмника прослушивания на событие мыши необходимо в качестве типа источника события Type в общей записи
public void аddTypeListener (TypeListener tL);
взять Mouse. Полученная функция
public void аddMouseListener (MouseListener tL);
применена в примере 9.5.2.
Пример 9.5.2. Обработка событий мыши на Java, используя интерфейс MouseListener.
///////////////
// Java и J# Вариант 2 (Вариант 1 смотрите в примере 10.4.3)
import java.awt.*;
import java.awt.event.*;
// Класс прикладного окна
public class MainClass extends Frame implements MouseListener
{
// Предопределённые обработчики интерфейса MouseListener
public void mouseClicked (MouseEvent mE){}
public void mouseEntered (MouseEvent mE){}
public void mouseExited (MouseEvent mE){}
public void mouseReleased (MouseEvent mE){}
// Выполнить предопределённый обработчик 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.setSize (new Dimension (400, 200));
mC.setTitle ("Hello");
mC.show ( );
mC.addMouseListener(mC);
}
}
///////////////
// Java и J# Вариант 3
import java.awt.*;
import java.awt.event.*;
// Класс прикладного окна
public class MainClass extends Frame implements MouseListener
{
public MainClass ( )
{
this.setSize (new Dimension (400, 200));
this.setTitle ("Hello");
this.addMouseListener (this);
}
// Предопределённые обработчики интерфейса MouseListener мыши
public void mouseClicked (MouseEvent mE){}
public void mouseEntered (MouseEvent mE){}
public void mouseExited (MouseEvent mE){}
public void mouseReleased (MouseEvent mE){}
// Выполнить предопределённый обработчик mousePressed мыши
public void mousePressed (MouseEvent mE)
{
System.out.println ("Mouse: x= " + mE.getX ( )
+ " y= " + mE.getY( ));
}
public static void main (String[] args) // Главная функция
{
MainClass mC= new MainClass ( );
mC.show ( );
}
}
///////////////
// Java и J# Вариант 4
import java.awt.*;
import java.awt.event.*;
// Класс объекта-приёмника событий
class Listener implements MouseListener
{
// Предопределённые обработчики интерфейса MouseListener мыши
public void mouseClicked (MouseEvent mE){}
public void mouseEntered (MouseEvent mE){}
public void mouseExited (MouseEvent mE){}
public void mouseReleased (MouseEvent mE){}
// Выполнить предопределённый обработчик mousePressed мыши
public void mousePressed (MouseEvent mE)
{
System.out.println ("Mouse: x= " + mE.getX ( )
+ " y= " + mE.getY( ));
}
}
// Класс прикладного окна
public class MainClass extends Frame
{
public MainClass ( )
{
Listener l= new Listener ( ); // Создать объект приёмника
this.setSize (new Dimension (400, 200));
this.setTitle ("Hello");
this.addMouseListener (l); // Подписать приёмник l событий
}
public static void main ( ) // Главная функция
{
MainClass mC= new MainClass ( );
mC.show ( );
}
}
/*
Result:
При каждом нажатии на клавишу мыши в прикладном окне выдаётся на консоль строка вида
Mouse: x= 10 y= 55, где x, y - координаты носика мыши
*/
В примере 9.5.2 рассмотрены несколько вариантов реализации обработки события мыши.
Прежде всего, обратим внимание, что в отличие от предопределённого обработчика mouseDown() примера 9.4.3 (вариант 1) обработчики мыши интерфейса MouseListener отличаются не только именами, но также возвращаемым значением и списком параметров. Интерфейс MouseListener требует реализовать в классе MainClass, наследующий этот интерфейс, всех обработчиков. Непотребные обработчики имеют пустые тела. И только необходимый нам обработчик mousePressed() выдаёт на консоль координаты носика мыши.
Во втором и третьем вариантах программы функция addMouseListener() добавляет объект приемника событий к источнику событий. Поскольку приёмник событий (объект окна класса MainClass), содержащий обработчики, является и источником событий, генерирующим событие (при нажатии на мышь в окне генерируются события мыши), приходится функцию, ссылающуюся в аргументе на объект окна, применить к тому же окну:
MainClass mC= new MainClass ( ); // Вариант2. В функции main()
mC.addMouseListener (mC);
this.addMouseListener (this); // Вариант3. В конструкторе MainClass()
В варианте 4 программы предложен отдельный класс Listener приёмника, наследующий интерфейс MouseListener и реализующий все функции этого интерфейса. Функции mouseClicked(), mouseEntered(), mouseReleased() и mouseExited() реализованы с пустыми телами, а функция mousePressed() выдаёт на консоль координаты носика мыши. В конструкторе класса MainClass источника создаётся объект приёмника, наследующий интерфейс MouseListener, и этот объект приёмника добавляется к источнику (this) с помощью функции addMouseListener ().