Начинаем программировать на языке Java


За работу! - часть 5


Следующий этап нашего эксперимента - проверка пересылки сообщений между элементами пользовательского интерфейса и аплетом. Создадим свой класс кнопки и назовем его MyButton. Добавьте в файл Events.java следующий исходный текст:

class MyButton extends Button { public MyButton(String text) { super(text); }

public boolean mouseDown(Event evt, int x, int y) { System.out.println ("--> MyButton.mouseDown() called..."); return true; }

public boolean mouseUp(Event evt, int x, int y) { System.out.println("--> MyButton.mouseUp() called..."); return true; }

public boolean mouseDrag(Event evt, int x, int y) { System.out.println("--> MyButton.mouseDrag() called..."); return true; }

public boolean mouseMove(Event evt, int x, int y) { System.out.println("--> MyButton.mouseMove() called..."); return true; }

public boolean mouseEnter(Event evt, int x, int y) { System.out.println("--> MyButton.mouseEnter() called..."); return true; }

public boolean mouseExit(Event evt, int x, int y) { System.out.println("--> MyButton.mouseExit() called..."); return true; }

public boolean keyDown(Event evt, int key) { System.out.println("--> MyButton.keyDown() called..."); }

public boolean keyUp(Event evt, int key) { System.out.println("--> MyButton.keyUp() called..."); return true; }

public boolean gotFocus(Event evt, Object o) { System.out.println("--> MyButton.gotFocus() called..."); return true; }

public boolean lostFocus (Event evt, Object o) { System.out.println("--> MyButton.lostFocus() called..."); return true; } }

Замените также в исходном тексте аплета все упоминания класса Button на MyButton. Перекомпилируйте и запустите аплет. Попробуйте поэкспериментировать с нажатиями на кнопку. Как вы заметили, все события стали передаваться непосредственно классу кнопки. Это же происходит и с нажатиями на кнопки клавиатуры.

Вывод: все события сначала передаются элементу интерфейса, с которым работает пользователь, и лишь потом, если разрешит обработчик события, передаются классу контейнера, в котором этот элемент содержится. Для такой передачи сообщения обработчик должен вернуть значение false.

Еще одна странность наблюдается при установленном на кнопке фокусе ввода. Если теперь нажать клавишу <Tab>, то ничего не произойдет. Фокус останется на кнопке и не будет передан на строку ввода, как это ожидается. Секрет прост: наш класс не пропускает нажатие <Tab> далее. Чтобы исправить ситуацию, вставим следующую строку в обработчик keyDown():

return key == 9 ? false : true;

Теперь, если код нажатой клавиши равен коду клавиши <Tab>, т. е. равен 9, то мы не обрабатываем событие, а возвращаем false, передавая его дальше в систему. Вывод: в Java-программах нет различия между функциональными клавишами и обычными. Поэтому вы должны сами отслеживать сомнительные моменты.

На сегодня достаточно. Вам предоставляется возможность самостоятельно поэкспериментировать с готовым аплетом.




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



Книжный магазин