이벤트, 리스너 및 어댑터 클래스

JavaBeans 이벤트는 단추 누르기나 창 닫기와 같은 활동이 발생할 때 신호를 보냅니다. Visual Editor for Java는 Java Bean 보기에 이벤트를 표시하며 이 보기를 사용하여 이벤트를 추가 및 제거할 수 있습니다.

JavaBean에 정의된 이벤트의 목록은 공통으로 사용되거나 선호되는 이벤트를 제어하는 BeanInfo 클래스에 설명되어 있습니다.

단추를 누를 때 데이터베이스가 갱신되는 것처럼 JavaBean이 생성될 때 어떤 동작이 발생하게 하려면, 이벤트를 JavaBean에 추가할 수 있습니다. 이벤트를 발생시키는 Java Bean은 소스이고, 이벤트가 발생할 때 다시 호출되는 오브젝트는 리스너라고 합니다. 각각의 JavaBean에는 리스너를 추가 및 제거하는 메소드 뿐만 아니라 각 이벤트의 리스너를 알려줄 수 있는 인터페이스가 있습니다.

일반적으로 소스 JavaBean에 XXX 메소드가 있는 경우에는 리스너 인터페이스 XXXListener와 두 가지 메소드가 있습니다. XXXListener가 java.util.EventListener를 확장하는 것이 중요합니다. 확장하지 않고 특정 BeanInfo가 제공되지 않으면 이벤트가 발견되지 않습니다.

XXXListener 인터페이스 자체의 메소드는 이벤트의 의미에 따라 다르지만, 규칙상 서명은 void <eventOccurenceMethodName>(<EventStateObjectType> evt);입니다. XXXListener가 java.util.EventObject를 확장하는 것이 중요합니다. 확장하지 않고 특정 BeanInfo가 제공되지 않으면 이벤트가 발견되지 않습니다.

이벤트의 예로는 마우스를 그 위에 놓을 때 이벤트를 발생시키는 JavaBean java.awt.Component가 있습니다. 리스너 인터페이스 java.awt.event.MouseMotionListener는 다음 두 가지 메소드를 구현합니다.

마우스 리스너를 추가하기 위해, java.awt.Component에는 다음 두 가지 메소드가 있습니다.

이벤트의 두 번째 스타일은 특성 값이 변경될 때 JavaBean이 생성합니다. 이것에 대한 예는 javax.swing.JButton에서 '사용 가능한' 특성입니다. 값이 변경될 때 이벤트를 끝내는 특성을 바운드 특성이라 합니다. 바운드 특성마다 별도의 리스너가 있는 대신 단일 콜백 메소드 void propertyCanged(PropertyChangeEvent evt);를 보유한 일반 리스너 인터페이스 java.beans.PropertyChangeListener가 있습니다. 인수 PropertyChangeEvent에는 메소드의 수신기에서 조회할 수 있는 세 개의 메소드가 있습니다.

String getPropertyName() 이벤트를 끝내는 JavaBean에서 변경된 특성 이름
Object getNewValue() 새 특성 값
Object getOldValue() 변경되기 전 특성 값

JavaBean의 특성 변경사항에서 관심을 등록하는 두 가지 메소드(void addPropertyChangeListener(PropertyChangeListener listener); void addPropertyChangeListener(String propertyName, PropertyChangeListener listener);)가 있습니다.

첫 번째 메소드는 항상 바운드 특성이 있는 JavaBean에 있습니다. 그러나 두 번째는 선택적이고 JavaBean 작성자가 사용한 이벤트 등록 스타일에 따라 다릅니다. 예를 들어, AWT 구성요소는 특성 변경 등록의 첫 번째 스타일을 사용하지만 Swing 구성요소는 두 가지 스타일 모두를 사용합니다.

이벤트 사용을 위한 다음 세 가지 오브젝트가 있습니다.

  1. 이벤트를 발생시키는 JavaBean(소스)
  2. 소스로부터 통지를 수신하는 클래스(리스너)
  3. 리스너를 다시 호출할 때 발생하는 논리를 구현하는 클래스

일반적으로, 논리를 실행하는 클래스가 리스너 인터페이스를 직접 구현하거나 내부 클래스를 사용하도록 마지막 두 가지가 결합됩니다. Visual Editor for Java가 인식하고 생성하는 코드 스타일은 이벤트 코드 생성 섹션에서 설명합니다.

어댑터 클래스

대부분의 리스너 인터페이스에는 하나 이상의 콜백 메소드가 있습니다. focusGained(java.awt.FocusEvent 이벤트)와 focusLost(java.awt.FocusEvent 이벤트)의 두 메소드를 가진 java.awt.FocusListener가 그 예입니다. 인터페이스를 구현하는 리스너 클래스를 작성할 때, Java 컴파일러는 모든 인터페이스 메소드를 구현하여 실제로 메소드의 하나 또는 일부에만 코드가 들어 있을 때 요구사항에 맞게 여러 개의 빈 메소드가 작성되도록 합니다. 다음 명령문은 Java Bean이 초점을 받을 때 일부 논리를 수행하는 데 사용되는 FocusListener를 표시합니다. 그러나 빈 focusLost 메소드를 제공해야 합니다.

javaBean.addFocusListener(new java.awt.event.FocusListener() {     
    public void focusGained(java.awt.event.FocusEvent e) {         
        doFocusGainedCode();     
     }         
        public void focusLost(java.awt.event.FocusEvent e) {     
     }
});

여러 리스너가 여러 개의 빈 리스너 메소드를 가지지 않도록 Adapter 클래스가 제공됩니다. 이 클래스는 리스너 인터페이스를 구현하고 메소드의 빈 no-op 구현을 제공합니다. 리스너가 이러한 클래스를 펼칠 수 있으며, 나머지(Adapter에서 계승)에 대해 기본 구현을 제공하지 않아도 선택한 메소드만 구체화할 수 있다는 장점이 있습니다.

javaBean.addFocusListener(new java.awt.event.FocusAdapter() {    
     public void focusGained(java.awt.event.FocusEvent e) {         
         doFocusGainedCode();     
         }
   });

비주얼 편집기는 Adapter 클래스를 인식하고 이 클래스에 대해 작업할 수 있습니다. BeanInfo 이벤트 섹션에서는 사용자 고유 이벤트에 대한 어댑터 클래스를 비주얼 편집기에 연관시킬 수 있는 방법을 설명합니다.

상위 주제: 비주얼 편집기를 사용하여 이벤트 처리

(C) Copyright IBM Corporation 1999, 2004. All Rights Reserved.