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

ItemListener, KeyListener, MouseListener, MouseMotionListener, TextListener

и WindowListener. Эти интерфейсы включают предопределённые

обработчики событий. Например, интерфейс ActionListener включает предо-

пределённый обработчик actionPerformed(), а интерфейс WindowListener

включает предопределённые обработчики windowClosed(), windowClosing(),

windowOpened() и др.

Так же как при уведомлении обозреватели подписывают на наблюдае-

мый объект с помощью функции addObserver(), так и в случае интерфейсных

элементов приёмники (блоки прослушивания) подписывают на источник с

помощью специальной функции класса источника, которая имеет вид:

public void add7ypeUstener (7>peListener tL);

где Т/ре-типисточникасобытия.

При наступлении события источника выполняется предопределённый

обработчик подписавшегося приёмника.

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

интерфейс MouseListener

Из предыдущего раздела явствует, что для подписки приёмника про-

слушивания на событие мыши необходимо в качестве типа источника собы-

тия Туре в общей записи

public vold add7ypeListener (7ypeListener tL);

взять Mouse. Полученная функция

public void addMouseLlstener (MouseListener tL);

применена в примере 10.5.2.

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

MouseListener.

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

// Java и J# Вариант 2 (Вариант 1 смотрите в примере 10.4.3)

lmportjava.awt.*;

Importjava.Awt.Event.*;

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

public class MainClass extends Frame implements MouseListener

{

// Предопределённые обработчики интерфейса MouseListener

publicvoid mouseCI!cked (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 () // Главная функция

{

Ma!nC!ass mC= new MainClass ( );

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

mC.setTitle ("Hello");

mC.show ( );

mC.addMouseListener(mC); >

>

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

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

Importjava.Awt.*;

Import java.Awt.Event.*;

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

public class MainClass extends Frame implements MouseListener

{

public MainClass ( )

{

thls.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

Importjava.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){}

pubiic void mouseReieased (Mousecveni 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 1= new Listener ( ); // Создать объект приёмника

thls,setSize (new Dimension (400, 200));

this.setTitle ("Hello");

this.addMouseListener (l}; // Подписать приёмник I событий

}

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

{

MainClass mC= new MainClass ();

mC.show ();

>

/>*

Result:

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

строка вида

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

*/

В примере 10.5.2 рассмотрены несколько вариантов реализации обработки

события мыши.

Прежде всего, обратим внимание, что в отличие от предопределённого обра-

ботчика mouseDown() примера 10.4.3 (вариант 1) обработчики мыши интер-

фейса MouseListener отличаются не только именами, но также возвращаемым

значением и списком параметров. Интерфейс MouseListener требует реализо-

вать в классе MainClass, наследующий этот интерфейс, всех обработчиков.

Непотребные обработчики имеют пустые тела. И только необходимый нам

обработчик mousePressed() выдаёт на консоль координаты носика мыши.

Во втором и третьем вариантах программы функция addMouseListener() до-

бавляет объект приемника событий к источнику событий. Поскольку приём-

ник событий (объект окна класса MainClass), содержащий обработчики, яв-

ляется и источником событий, генерирующим событие (при нажатии на

мышь в окне генерируются события мыши), приходится функцию, ссылаю-

щуюся в аргументе на объект окна, применить к тому же окну:

MainClass mC= new MainClass ( ); // Вариант2. В функции main()

mC.addMous6Llstener (mC);

this.addMouseLlstener (this); // ВариантЗ. В конструкторе MainClass()

В варианте 4 программы предложен отдельный класс Listener приёмника,

наследующий интерфейс MouseListener и реализующий все функции этого

интерфейса. Функции mouseClicked(), mouseEntered(), mouseReleased() и

mouseExited() реализованы с пустыми телами, а функция mousePressed() вы-

даёт на консоль координаты носика мыши. В конструкторе класса MainClass

источника создаётся объект приёмника, наследующий интерфейс MouseListener,

и этот объект приёмника добавляется к источнику (this) с помощью

функции addMouseListener ().