|
тпускания клавиши мыши.
Метод mouseDrag
До сих пор наши аплеты выполняли рисование только в методе paint, и так
поступают большинство аплетов. Однако наш аплет должен рисовать линии во время
перемещения курсора мыши, так как в противном случае пользователю не будет
видно, как пройдет рисуемая линия.
Для того чтобы нарисовать что-либо в окне аплета, наобходимо получить
контекст отображения. Методу paint этот контекст передается через парметр как
объект класса Graphics. Если же вы собираетесь рисовать в другом методе,
отличном от paint, необходимо получить контекст отображения, например, так:
Graphics g = getGraphics();
После получения контекста отображения и включения режима рисования (записью
в переменную bDrawing значения true) метод mouseDrag стирает линию, которая
была нарисована ранее, в процессе предыдущего вызова этого же метода:
g.setColor(Color.yellow);
g.drawLine(dmDown.width, dmDown.height,
dmPrev.width, dmPrev.height);
Для стирания линии мы рисуем ее на том же месте с использованием цвета,
совпадающего с цветом фона.
Далее метод mouseDrag рисует новую линию черного цвета, соединяя точку, в
которой была нажата клавиша мыши, с точкой текущего расположения курсора мыши:
g.setColor(Color.black);
g.drawLine(dmDown.width, dmDown.height, x, y);
После рисования линии координаты ее конца сохраняются в поле dmPrev для
стирания этой линии при следующем вызове метода mouseDrag:
dmPrev = new Dimension(x, y);
return true;
Метод mouseMove
Метод mouseMove не делает ничего, за исключением того, что он отключает
режим рисования. Таким образом, простое перемещение курсора мыши над окном
аплета не приводит к рисованию линий.
События от клавиатуры
Аплет может обрабатывать события, создаваемые клавиатурой. Например, он
может реагировать на функциональные клавиши или на клавиши ускоренного выбора
функций.
Для того чтобы обработать события от клавиатуры, ваш аплет должен
переопределить методы keyDown и keyUp:
public boolean keyDown(Event evt, int nKey)
{
. . .
}
public boolean keyUp(Event evt, int nKey)
{
. . .
}
В качестве первого параметра этим методам передается объект типа Event, о
полях которого мы рассказывали в разделе “Как обрабатываются события” этой
главы.
Наибольший интерес представляют поля объекта evt с именами key и modifiers.
Через них передается, соответственно, код нажатой клавиши и код модификации.
Возможные значения для этих полей вы найдете в только что указанном разделе.
Второй параметр методов keyDown и keyUp с именем nKey дублирует поле key
объекта evt.
Приложение KeyCode
Для демонстрации методов обработки клавиатурных событий мы подготовили аплет
KeyCode. В его окне отображаются символы, соответствующие нажимаемым клавишам,
код соответствующих клавиш и коды модификации (рис. 4.4).
Рис. 4.4. Окно аплета KeyCode
Аплет KeyCode интересен тем, что в процессе отображения новые строки
появляются в верхней части окна, а старые сдвигаются вниз после отпускания
клавиши. Таким образом, мы организовали свертку в окне аплета.
Прежде чем нажимать клавиши, вы должны передать фокус вода окну аплета. Это
можно сделать, щелкнув в окне левой клавишей мыши. Фокус ввода - это атрибут,
который присваивается окну, обрабатывающему ввод от клавиатуры. Так как
клавиатура одна, а аплетов и других активных окон на экране может быть много,
необходим механизм, позволяющий определить, в какое окно направялются события,
создаваемые клавиатурой. Такой механизм и обеспечивается атрибутом фокуса ввода.
Исходные тексты приложения KeyCode
Файл исходного текста приложения KeyCode приведен в листинге 4.5.
Листинг 4.5. Файл KeyCode\KeyCode.java
// =========================================================
// Просмотр кодов клавиш
//
// (C) Фролов А.В, 1997
//
// E-mail: [email protected]
// WWW: http://www.glasnet.ru/~frolov
// или
// http://www.dials.ccas.ru/frolov
// =========================================================
import java.applet.*;
import java.awt.*;
|
|