Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Part6(9-прилож)+++а.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.82 Mб
Скачать

9.4.3. Обработка событий мыши на языке Java с использованием предопределённого обработчика mouseDown

Различные варианты обработки событий на языке Java будут рассмотрены в разделе 9.5. В программе же примера 9.4.3 иллюстрируется обработка события мыши на языке Java, аналогичная обработке на языке C# с использованием предопределённой функции. Пример понятен без комментариев.

Пример 9.4.3. Программа обработки события мыши на Java.

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

// Java Вариант 1 (Другие варианты в примере 10.5.2)

import java.awt.*;

import java.awt.event.*;

class MainClass extends Frame // Класс прикладного окна

{

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

public boolean mouseDown (Event e, int x, int y)

{

System.out.println ("Mouse: x= " + x + " y= " + y);

return true;

}

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

{

MainClass mC= new MainClass ( );

mC.setSize (400, 200);

mC.setTitle ("Hello");

mC.show ( );

}

}

/*

Result:

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

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

*/

Java и J#. В программу варианта 1 (с другими вариантами Вы познакомитесь вскоре) включён пакет java.awt, содержащий оконные библиотечные классы, и пакет java.awt.event, включающий классы и интерфейсы, связанные с событиями. Функция public boolean mouseDown (Event e, int x, int y) описана в базовом классе Frame окна. В нашей программе она переопределяется, осуществляя выдачу на консоль координат носика мыши.

Завершим рассмотрение события MouseDown, связав его со статическими и обычными обработчиками объектов двух разных классов в примере 9.4.4. При нажатии на клавишу мыши в прикладном окне выдаётся панель сообщений для каждого обработчика со строкой, содержащей значения координат носика курсора мыши и имя класса, к которому принадлежит функция-обработчик.

9.4.4. Связь события с несколькими объектами на языке c#

Как правило, во много объектной программе событие из объектов-источников посылается нескольким объектам-приёмникам. Самостоятельно функционирующие объекты взаимодействуют посредством событий. В программе примера 9.4.4 событие мыши обрабатывается как в объекте источнике класса MainClass, так и в объектах-приёмниках классов CObj1 и CObj2. Подписка обработчиков события этих объектов на событие источника осуществляется в теле конструктора объекта источника класса MainClass. При нажатии клавиши мыши в окне источника выдаются блоки сообщений типа MessageBox от обработчиков события мыши.

Пример 9.4.4. Связь события с несколькими объектами.

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

// C#

using System;

using System.Windows.Forms;

class CObj1 // Класс со статической функцией обработки события MouseDown

{

static public void MouseDownObj1 (object sender, MouseEventArgs e)

{

MessageBox.Show ("CObj1:x=" + (e.X).ToString( ) +

" y=" + (e.Y).ToString( ));

}

}

class CObj2 // Класс с обычной функцией обработки события MouseDown

{

public void MouseDownObj2 (object sender, MouseEventArgs e)

{

MessageBox.Show ("CObj2:x=" + (e.X).ToString( ) +

" y=" + (e.Y).ToString( ));

}

}

class MainClass : Form // Класс прикладного окна

{

public MainClass ( ) // Конструктор

{

// Инициализация события MouseDown

this.MouseDown += new MouseEventHandler (CObj1.MouseDownObj1);

CObj2 obj2= new CObj2( );

this.MouseDown += new MouseEventHandler (obj2.MouseDownObj2);

this.MouseDown += new MouseEventHandler (OurMouseDown);

}

// Обработать событие MouseDown

private void OurMouseDown (object sender, MouseEventArgs e)

{

// Выдать блок сообщений типа MessageBox

MessageBox.Show ("CMainClass:x=" + (e.X).ToString ( ) + " y="

+ (e.Y).ToString ( ));

}

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

{

Application.Run (new MainClass ( )); // Выполнить приложение

}

}

C#. Программа примера 9.4.4 иллюстрирует применение и подписку обработчиков на событие мыши статического обработчика и обычных обработчиков, принадлежащих объектам различных классов. Статический обработчик MouseDownObj1() описан в классе CObj1. Обычный обработчик OurMouseDown() описан в классе прикладного окна, а обычный обработчик MouseDownObj2() – в классе CObj2. Следует обратить внимание на отличие в подписке на событие обычных и статических обработчиков. При подписке обычного обработчика в аргументе конструктора делегата указывается обработчик через ссылку на объект, а при подписке статического обработчика в аргументе конструктора делегата указывается обработчик через ссылку на класс.

Рис. 9.4.4. При нажатии на клавишу мыши появился блок сообщений очередного обработчика

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]