Добавление событий в компонент

В панели Эскиз или в панели JavaBean визуального редактора можно добавить событие или компонент.

Для этого выполните следующие действия:
  1. Щелкните правой кнопкой мыши на компоненте в панели объектов Java или панели Эскиз.
  2. В появившемся контекстном меню выберите пункт События. При этом будут показаны предпочитаемые события компонента. Выполните одно из следующих действий:
    • Выберите одно из событий. Оно будет добавлено в компонент. Например, предпочитаемыми для JFrame являются события windowClosed и windowOpened.
    • Выберите Добавить события чтобы открыть окно добавления событий.
  3. В случае выбора второго варианта в окне будет представлен список событий, разделенных на категории. Выберите нужное событие и нажмите Готово.
    • В окне диалога Добавление события показываются все события, доступные для данного компонента. На первом уровне иерархического списка показываются подписчики событий, а на втором - методы подписчика, вызываемые событием.
      Окно Добавление события
    • В окне диалога также можно выбрать, создавать новый подписчик или использовать существующий. После открытия окно проанализирует существующие обработчики событий, и если оно найдет обработчик, который признает повторно используемым, то отметит его отдельным значком. Подписчики, использующие класс-адаптер, отмечаются значком event present class, а остальные - значком event present. Внутри подписчика реализованные события отмечаются зеленой стрелкой Зеленая стрелка, а остальные - серой Серая стрелка
    • При создании нового подписчика можно выбрать, должен ли он использовать класс-адаптер. Если это не предусмотрено, переключатели будут неактивны и подписчику нужно будет реализовывать методы для всех событий. Например, если существующих подписчиков нет или нужное событие в них уже реализовано, опция Использовать существующий подписчик неактивна. Если класса-адаптера для данного объекта нет, то опция extends: класс-адаптер также неактивна.
    • В случае события propertyChange доступны дополнительные параметры. Новый подписчик регистрируется в JavaBean с помощью метода addPropertyChange(PropertyChangeListener listener). При изменении любого свойства будет вызываться метод propertyChange(PropertyChangeEvent event) подписчика. Однако некоторые JavaBean (например, компоненты) поддерживают второй метод регистрации addPropertyChange(String propertyName, PropertyChangeListener listener) с дополнительным параметром, в котором можно указать свойство, об изменении которого следует уведомлять подписчик. В таких случаях по умолчанию выбирается второй метод.

      Добавление события

      Подписчики, привязанные к одному свойству, не могут быть использованы повторно. В остальных подписчиках измененное свойство определяется в блоке if:

      javaBean.addPropertyChangeListener(new java.beans.PropertyChangeListener() {  
          public void propertyChange(java.beans.PropertyChangeEvent e) {                        
                   if ((e.getPropertyName().equals("font"))) {              
                         System.out.println("propertyChange(font)");         
                   }     
                }  
          });

      Подписчики, не привязанные к одному свойству, можно использовать повторно путем добавления в них новых блоков if{} для других свойств. 

При использовании существующего подписчика в него добавляется метод события. Для того чтобы существующий подписчик можно было использовать повторно, он должен быть в анонимном внутреннем классе объекта JavaBean, реализующем интерфейс события. Кроме того, метод добавляемого события должен быть пустым, либо подписчик должен расширять класс-адаптер, и в этом случае метод события не должен существовать. Для событий изменения свойств подписчик PropertyChangeListener будет использован повторно если он регистрируется в JavaBean с помощью общего метода addPropertyChange(PropertyChangeListener listener). Если в нем не будет блока обработки данного свойства, он будет добавлен.

Если подходящего подписчика нет, то будет создан новый.  Это будет анонимный внутренний класс и, если соответствующий класс-адаптер доступен, он будет расширять класс-адаптер. В противном случае он будет реализовывать интерфейс события непосредственно. Для обработки события будет создан пустой метод с комментарием //TODO, в который вам нужно будет добавить код. Наличие комментария //TODO приводит к добавлению метода в окно Задачи. Удалите его когда код обработки будет готов.

В предыдущем примере метод windowOpened уже существует. Если подписчик расширяет класс-адаптер, то он будет использован повторно, т.к. не имеет метода windowClosed. Программой добавляется пустой метод windowClosed(WindowEvent e) такого вида:

this.addWindowListener(new java.awt.event.WindowAdapter() {     
        public void windowClosed(java.awt.event.WindowEvent e) {
         System.out.println("windowClosed()"); // TODO Добавьте код здесь       }      
        public void windowOpened(java.awt.event.WindowEvent e) {         
             callExistingWindowOpenedLogic();     
            }
});

В экспертном режиме события также можно добавлять с помощью панели объектов Java. В меню События содержатся все методы событий подписчика, и те, которые уже используются, неактивны.

Добавление события windowClosed

Для PropertyChangeListener в контекстном меню показываются все связанные свойства JavaBean. Те из них, которые уже используются в PropertyChangeListener, неактивны.


Подписчик изменения свойств

В подписчиках, зарегистрированных с помощью метода с одним аргументом, измененное свойство определяется в блоке if:

javaBean.addPropertyChangeListener(new java.beans.PropertyChangeListener() {  
    public void propertyChange(java.beans.PropertyChangeEvent e) {                        
             if ((e.getPropertyName().equals("font"))) {              
                   System.out.println("propertyChange(font)");         
             }     
          }  
    });

Подписчики, не привязанные к одному свойству, используются повторно путем добавления в них новых блоков if{} для других свойств. 

Подписчики, регистрированные в JavaBean с помощью метода с двумя аргументами addPropertyChangeListener(String propertyName, PropertyChangeListener listener), привязываются к одному свойству и не могут использоваться повторно. В этом случае в подменю События неактивны все элементы.

Связанные концепции
События, подписчики и классы-адаптеры
Панель JavaBean
Связанные задачи
Просмотр событий компонента
Удаление событий из компонента
Просмотр исходного кода события

(C) Copyright IBM Corporation 1999, 2004. Все права защищены.