디자인 보기 또는 Java Bean 보기에서 구성요소에 이벤트를 추가할 수 있습니다.
두 개의 인수 메소드를 사용하여 추가되는 리스너는 특정 특성에 고유하므로 다른 특성에는 재사용할 수 없습니다. 단일 인수 메소드로 추가되는 리스너에는 다음 코드에 표시되는 대로 각 특성 콜백의 논리를 처리하기 전에 특성 이름을 확인하는 if 명령문이 있습니다.
javaBean.addPropertyChangeListener(new java.beans.PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent e) { if ((e.getPropertyName().equals("font"))) { System.out.println("propertyChange(font)"); } } });
이를 통해 단일 인수 메소드로 추가된 PropertyChangeListener를 둘 이상의 특성에 사용할 수 있습니다(복수 if{} 블록을 사용하여).
사용할 수 있는 기존 리스너가 있는 경우 이벤트를 추가하면 콜백 메소드가 추가됩니다. 그렇지 않은 경우 새 리스너가 작성됩니다. 기존 리스너를 사용하려면 리스너는 리스너 인터페이스를 구현하는 JavaBean에서 익명의 내부 클래스이어야 합니다. 이것은 콜백 메소드에 대한 빈 메소드 본문을 가지고 있거나 어댑터 클래스를 펼쳐야 합니다. 추가 중인 이벤트 콜백의 기존 메소드가 없습니다. 특성의 경우 기존 PropertyChangeListener가 단일 인수 메소드 addPropertyChange(PropertyChangeListener listener)로 JavaBean에 추가될 경우 재사용됩니다. 아직 코드가 없는 경우, 특성 처리가 추가됩니다.
콜백 메소드가 추가될 수 있는 기존 리스너 후보가 없는 경우 새 리스너가 작성됩니다. 이 리스너는 익명의 내부 클래스이므로 이벤트에 어댑터 클래스가 정의된 경우 이 리스너가 이 어댑터 클래스를 확장합니다. 그렇지 않으면 리스너 인터페이스를 구현합니다. 이벤트가 추가되면 스텁 메소드가 //TODO 주석과 함께 작성됩니다. 스텁 메소드는 이벤트가 발생할 때 실행될 소스 코드의 표시기로서, 원하는 작동을 수행하려면 이 메소드를 변경해야 합니다. //TODO 주석은 타스크 창에 표시되므로 이 주석을 사용하여 불완전한 메소드를 플래그할 수 있습니다. 그러므로 일단 콜백 논리가 기록된 경우 나중에 불완전한 메소드를 찾아서 //TODO 주석을 제거할 수 있습니다.
이전 예제에는 windowOpened 메소드가 이미 존재합니다. 이 메소드가 어댑터를 확장하는 리스너인 경우, windowClosed 메소드가 없기 때문에 동일한 리스너가 재사용됩니다. windowClosed(WindowEvent e) 메소드가 추가되고 메소드 스텁과 //TODO 주석이 다음과 같이 추가됩니다.
this.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosed(java.awt.event.WindowEvent e) { System.out.println("windowClosed()"); // TODO Auto-generated stub windowClosed() } public void windowOpened(java.awt.event.WindowEvent e) { callExistingWindowOpenedLogic(); } });
앞에 표시된 대로 전문가 모드에서는 JavaBean에 이벤트를 추가할 수 있으며 Java Bean 트리의 리스너에 추가할 수도 있습니다. 이벤트 메뉴는 리스너의 모든 이벤트 콜백 메소드를 표시하므로 이미 사용된 메소드는 사용할 수 없습니다.
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{} 블록을 사용하여 단일 인수 메소드로 추가된 PropertyChangeListener를 둘 이상의 특성에 사용할 수 있고, 두 번째 및 후속 특성 콜백이 추가될 때 새 if{} 블록이 추가됩니다.
propertyChangeListener가 두 개의 인수 메소드 addPropertyChangeListener(String propertyName, PropertyChangeListener listener)를 사용하여 JavaBean에 추가되면 특정 특성에 고유하므로 다른 특성에 재사용할 수 없습니다. 이 경우 모든 이벤트 계단식 메뉴 하위가 사용 불가능해집니다.