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의 'enabled' 특성이 있습니다. 값이 변경될 때 이벤트를 발생시키는 특성을 한계 특성이라고 합니다. 각 한계 특성마다 별도의 리스너 인터페이스를 갖는 대신 단일 콜백 메소드 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 컴포넌트는 두 스타일을 모두 사용합니다.
이벤트 사용을 위한 다음 세 가지 오브젝트가 있습니다.
일반적으로 마지막 두 개는 결합되므로 로직을 실행하는 클래스는 직접 리스너 인터페이스를 구현하거나 내부 클래스를 사용합니다. Visual Editor for Java가 인식하고 생성하는 코드 스타일은 이벤트 코드 생성 절에서 다룹니다.
대부분의 리스너 인터페이스에는 둘 이상의 콜백 메소드가 있습니다. 예로는 두 개의 메소드 focusGained(java.awt.FocusEvent event) 및 focusLost(java.awt.FocusEvent event)가 있는 java.awt.FocusListener가 있습니다. 인터페이스를 구현하는 리스너 클래스를 작성할 때 Java 컴파일러는 모든 인터페이스 메소드가 구현되도록 하므로 실제 코드는 메소드 중 하나 또는 일부에만 들어 있으면서 요구사항을 만족하기 위해 많은 빈 메소드가 작성되는 경우가 많습니다. 다음 명령문은 Java Bean이 초점을 얻을 때 특정 로직을 수행하는 데 사용되는 FocusListener를 표시하지만 빈 focustLost 메소드가 제공됩니다.
javaBean.addFocusListener(new java.awt.event.FocusListener() {
public void focusGained(java.awt.event.FocusEvent e) {
doFocusGainedCode();
}
public void focusLost(java.awt.event.FocusEvent e) {
}
});
많은 리스너에 대해 많은 빈 리스너 메소드가 생기지 않도록 하기 위해 어댑터 클래스가 제공됩니다. 어댑터 클래스는 리스너 인터페이스를 구현하고 해당 메소드의 빈 무연산 구현을 제공합니다. 장점은 리스너가 어댑터 클래스를 확장할 수 있고 어댑터에서 상속된 나머지에 대한 기본 구현을 제공할 필요 없이 선택된 메소드만 특수화한다는 것입니다.
javaBean.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent e) {
doFocusGainedCode();
}
});