проверка пересылки сообщений между элементами
Следующий этап нашего эксперимента - проверка пересылки сообщений между элементами пользовательского интерфейса и аплетом. Создадим свой класс кнопки и назовем его 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-программах нет различия между функциональными клавишами и обычными. Поэтому вы должны сами отслеживать сомнительные моменты.
На сегодня достаточно. Вам предоставляется возможность самостоятельно поэкспериментировать с готовым аплетом.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий