JDK-4257538 : JComponent: getListeners() returning incorrect values for listeners.
  • Type: Bug
  • Component: client-libs
  • Sub-Component: java.awt
  • Affected Version: 1.3.0
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • OS: solaris_2.5,solaris_2.6
  • CPU: sparc
  • Submitted: 1999-07-27
  • Updated: 2000-02-17
  • Resolved: 2000-02-17
Related Reports
Duplicate :  
Duplicate :  
Duplicate :  
Duplicate :  
Duplicate :  
Duplicate :  
Duplicate :  
Duplicate :  
Duplicate :  
Duplicate :  
Duplicate :  
Duplicate :  
Duplicate :  
Duplicate :  
Relates :  
Description
The implementation of getListeners() for JComponent is broken for the following listeners:

PropertyChangeListener, AncestorListener, VetoableChangeListener

For the following test program, getListeners() will always return 0 no matter how many listeners you add to the component.

----------------------------------- Cut Here ----------------------------------

import java.beans.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;

public class TestGetListenersForJComponent
implements PropertyChangeListener, AncestorListener, VetoableChangeListener {

    JToolTip aComp = new JToolTip();
    EventListener[] eventListener;

    public TestGetListenersForJComponent() {
        eventListener = aComp.getListeners(PropertyChangeListener.class);
        System.out.println("PropertyChangeListener before adding a listener: " + eventListener.length);
        eventListener = aComp.getListeners(AncestorListener.class);
        System.out.println("AncestorListener before adding a listener: " + eventListener.length);
        eventListener = aComp.getListeners(VetoableChangeListener.class);
        System.out.println("VetoableChangeListener before adding a listener: " + eventListener.length);

        aComp.addPropertyChangeListener(this);
        aComp.addAncestorListener(this);
        aComp.addVetoableChangeListener(this);

        System.out.println("");

        eventListener = aComp.getListeners(PropertyChangeListener.class);
        System.out.println("PropertyChangeListener after adding a listener: " + eventListener.length);
        eventListener = aComp.getListeners(AncestorListener.class);
        System.out.println("AncestorListener after adding a listener: " + eventListener.length);
        eventListener = aComp.getListeners(VetoableChangeListener.class);
        System.out.println("VetoableChangeListener after adding a listener: " + eventListener.length);

    }

    public void propertyChange(PropertyChangeEvent e) {}

    public void ancestorAdded(AncestorEvent e) {}

    public void ancestorMoved(AncestorEvent event) {}

    public void ancestorRemoved(AncestorEvent event) {}

    public void vetoableChange(PropertyChangeEvent evt) {}

    public static void main(String[] args) {
        new TestGetListenersForJComponent();
    }
}        

----------------------------------- Cut Here -----------------------------------


edmund.lou@eng 1999-07-27
JFC SQE

Comments
EVALUATION This is not a regression. This behavior is not implemented in Kestrel which is the first release to include any public facilities for the retrieval of listeners. Support for property change listeners which are handled differently by the current implementation will be included in a future release. Bugid 4290704 was filed for the completion of this project. eric.hawkes@eng 2000-02-16
16-02-2000