<
  • Главная
Статьи

Общие правила написания событий слушателей

Когда AWT вызывает метод прослушивателя событий, этот метод выполняется в потоке событий AWT. Поскольку все другие методы обработки событий и рисования выполняются в том же потоке, медленный метод прослушивания событий может заставить программу казаться не отвечающей и медленной для перерисовки.

В этом разделе рассказывается, как использовать адаптеры и внутренние классы для уменьшения помех в вашем коде. Если вас не волнует эта тема, не стесняйтесь переходить к следующий раздел ,

Большинство интерфейсов слушателей, в отличие от ActionListener, содержат более одного метода. Например, интерфейс MouseListener содержит пять методов: mousePressed, mouseReleased, mouseEntered, mouseExited и mouseClicked. Даже если вы заботитесь только о щелчках мыши, если ваш класс напрямую реализует MouseListener, вы должны реализовать все пять методов MouseListener. Методы для тех событий, которые вас не волнуют, могут иметь пустые тела. Вот пример:

// Пример с загроможденным, но допустимым кодом. открытый класс MyClass реализует MouseListener {... someObject.addMouseListener (this); ... / * Пустое определение метода. * / public void mousePressed (MouseEvent e) {} / * Пустое определение метода. * / public void mouseReleased (MouseEvent e) {} / * Пустое определение метода. * / public void mouseEntered (MouseEvent e) {} / * Пустое определение метода. * / public void mouseExited (MouseEvent e) {} public void mouseClicked (MouseEvent e) { ... // Здесь реализована реализация обработчика событий ... }} К сожалению, результирующая коллекция пустых тел методов может усложнить чтение кода и поддерживать. Чтобы помочь вам не загромождать код пустыми телами методов, AWT и Swing предоставляют класс адаптера для каждого интерфейса слушателя с более чем одним методом. [ОЖИДАЕТ: это не совсем верно для Swing.] ( Обработка общих событий перечисляет все слушатели и их адаптеры.) Например, класс MouseAdapter реализует интерфейс MouseListener. Класс адаптера реализует пустые версии всех методов его интерфейса.

Чтобы использовать адаптер, вы создаете его подкласс вместо прямой реализации интерфейса слушателя. Например, расширяя MouseAdapter, ваш класс наследует пустые определения всех пяти методов, которые содержит MouseListener.

/ * * Пример расширения класса адаптера вместо непосредственной реализации интерфейса слушателя. * / открытый класс MyClass extends MouseAdapter {... someObject.addMouseListener (this); ... public void mouseClicked (MouseEvent e) { ... // Реализация обработчика событий здесь ... }}

Что если вы не хотите, чтобы ваш класс обработки событий наследовал от класса адаптера? Например, предположим, что вы пишете апплет, и вы хотите, чтобы ваш подкласс Applet содержал некоторый код для обработки событий мыши. Поскольку язык Java не допускает множественное наследование, ваш класс не может расширять классы Applet и MouseAdapter. Решение состоит в том, чтобы определить внутренний класс - класс внутри вашего подкласса Applet - который расширяет класс MouseAdapter,

// Пример использования внутреннего класса. открытый класс MyClass расширяет Applet {... someObject.addMouseListener (new MyAdapter ()); ... class MyAdapter extends MouseAdapter {public void mouseClicked (MouseEvent e) { ... // Здесь реализована реализация обработчика событий ... }}} Вот еще один пример использования внутреннего класса: // Пример использования анонимного внутреннего учебный класс. открытый класс MyClass extends Applet {... someObject.addMouseListener (new MouseAdapter () {public void mouseClicked (MouseEvent e) { ... // Реализация обработчика событий идет здесь ... }}); ...}} Внутренние классы работают хорошо, даже если вашему обработчику событий необходим доступ к частным переменным экземпляра из включающего класса. Пока вы не объявляете внутренний класс статическим, внутренний класс может ссылаться на переменные и методы экземпляра, как если бы его код находился в содержащем классе. Чтобы сделать локальную переменную доступной для внутреннего класса, просто сохраните копию переменной как конечную локальную переменную. Примечание. Некоторые компиляторы 1.1 не позволяют внутреннему классу использовать частные переменные экземпляра включающего класса. Обходной путь - удалить закрытый спецификатор из объявления переменной экземпляра.

Для получения дополнительной информации о внутренних классах см. Реализация вложенных классов Для получения дополнительной информации о внутренних классах см ,

Похожие

Обработка событий
... слушателей. И наоборот, один слушатель может зарегистрироваться в нескольких источниках событий. событие событие объект / ----> источник прослушивателя событий ---------------------------> прослушиватель событий \ ----> прослушиватель событий Надпись: несколько слушателей могут зарегистрироваться, чтобы получать уведомления о событиях определенного типа из определенного источника. Всякий раз, когда вы хотите обнаружить события от определенного компонента,
Как произвести хорошее первое впечатление? Искусство написания контент-маркетинговых текстов
Вернуться в блог С хорошим текстом в Интернете это похоже на первое свидание - если вы пропустите ранние свидания, есть большая вероятность, что вы встретитесь снова. И хотя вы можете настаивать на том, что внешний вид не имеет большого значения, в контенте контент-маркетинга
Метаданные, системные представления в SQL Server, информация об объектах
Одним из наиболее полезных источников информации о структурах и свойствах объектов (метаданных), создаваемых в базах данных SQL Server, являются системные представления. Обычные пользователи редко используют свои возможности. Возможно, это связано с количеством просмотров, разных типов и необходимостью узнать об их структурах. Или, может быть, они просто не осознают своего существования или им они ни для чего не нужны? Количество представлений, из которых мы можем извлечь уроки, увеличивается
Конфигурация брандмауэра в Windows Vista
Впервые брандмауэр появился в Windows XP SP2 (по умолчанию включен). Это одна из основных программ защиты от угроз, возникающих в результате использования Интернета и сети безопасности. Фильтрует как входящие, так и исходящие соединения с компьютера, затем при необходимости блокирует потенциально опасное приложение. Брандмауэр, интегрированный с Windows XP, был относительно простой и не встроенной системной функцией. В Windows Vista этот элемент был перестроен и улучшен. Наиболее важные

Комментарии

Если они не обращают внимания на правила, которые они устанавливают, почему тогда их должны уважать водители?

Или, может быть, они просто не осознают своего существования или им они ни для чего не нужны?


Новости
  • Виртуальный хостинг

    Виртуальный хостинг. Возможности сервера распределяются в равной мере между всеми... 
    Читать полностью

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью