Программирование на языке Java


Рисование "каракулей" в Java 1.0


Рисование "каракулей" в Java 1.0

Классический апплет, в котором используется модель обработки событий Java 1.0. В нем методы mouseDown() и mouseDragO переопределены таким образом, чтобы пользователь имел возможность рисовать "каракули" с помощью мыши. Также переопределен метод keyDown(), чтобы при нажатии клавиши [С] экран очищался, и метод action(), чтобы экран очищался после щелчка на кнопке Clear.

/* <applet code = “Scribble1” width=200 height=200>

</applet>

*/

import java.applet.*;

import java.awt.*;

/** Простой апплет, в котором используется модель обработки событий 1.0 */

public class Scribble1 extends Applet {

private int lastx, lasty; // Хранят координаты курсора мыши.

Button clear_button; // Кнопка Clear.

Graphics g; // Объект Graphics, который необходимо нарисовать.

/** Инициализация кнопки и объекта Graphics */

public void init() {

clear_button = new Button("Clear");

this.add(clear_button);

g = this.getGraphics();

}

/** Реакция на нажатие кнопки мыши */

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

lastx = x; lasty = y;

return true;

}

/** Реакция на перетаскивание с помощью мыши */

public boolean mouseDrag(Event e, int x, int y) {

g.setColor(Color.black) ;

g.drawLine(lastx, lasty, x, y);

lastx = x; lasty = y;

return true;

}

/** Реакция на нажатие клавиши [С] */

public boolean keyDown(Event e, int key) {

if ((e.id == Event.KEY_PRESS) && (key == 'с' ) ) {

clear() ;

return true;

}

else return false;

}

/** Реакция на нажатие кнопки Clear */

public boolean action(Event e, Object arg) {

if (e.target == clear_button) {

clear();

return true;

}

else return false;

}

/** Метод для стирания каракулей */

public void clear() {

g.setColor(this.getBackground());

g.fillRect(0, 0, bounds().width, bounds().height);

} }

Экран вроде бы пустой – но на нем можно рисовать ! – Scribble1.html.

Модель обработки событий Java 1.1

Новая модель обработки событий представляет собой, по существу, модель обратных вызовов (callback). При создании GUI-элемента ему сообщается, какой метод или методы он должен вызывать при возникновении в нем определенного события (нажатия кнопки, мыши и т.п.). Эту модель очень легко использовать в C++, поскольку этот язык позволяет оперировать указателями на методы (чтобы определить обратный вызов, необходимо всего лишь передать указатель на функцию). Однако в Java это недопустимо (методы не являются объектами). Поэтому для реализации новой модели необходимо определить класс, реализующий некоторый специальный интерфейс. Затем можно передать экземпляр такого класса GUI-элементу, обеспечивая таким образом обратный вызов. Когда наступит ожидаемое событие, GUI-элемент вызовет соответствующий метод объекта, определенного ранее.




- Начало -  - Назад -  - Вперед -