
- •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.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. При нажатии на клавишу мыши появился блок сообщений очередного обработчика