-
Bug
-
Resolution: Unresolved
-
P4
-
6u16
-
x86
-
windows_xp
FULL PRODUCT VERSION :
java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) Client VM (build 14.2-b01, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
A DESCRIPTION OF THE PROBLEM :
1. JComboBox.setEnabled(boolean enabled) fires twice property change event.
This happens because the event is fired also from JComponent.setEnabled(), which is called from the overriding method.
2. JComboBox.setEnabled(...) *always* fires property change event even when enabled status is not changed. Looking at code we see it's bypassing the "changed test" from firePropertyChange, by calling it with different values on purpose: firePropertyChange( "enabled", !isEnabled(), isEnabled() ).
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Call setEnabled(!isEnabled()) on a JComboBox after registering a property change event listener on "enabled" property.
2. Call setEnabled(isEnabled()) on a JComboBox after registering a property change event listener on "enabled" property.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
1. Expected listener to be notified once.
2. Expected no notification on listener.
ACTUAL -
1. Listener is notified twice.
2. Listener is notified even if enabled status didn't change.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.beans.*;
import javax.swing.*;
public class TestJComboBoxEnabled
{
public static void main(String[] args)
{
JComboBox combo = new JComboBox();
combo.addPropertyChangeListener("enabled", new PropertyChangeListener()
{
@Override
public void propertyChange(PropertyChangeEvent evt)
{
System.out.println("Event fired:" + evt.getOldValue() + " -> " + evt.getNewValue());
}
});
System.out.println("Enabled status is: " + combo.isEnabled());
System.out.println("Change enabled status:");
combo.setEnabled(!combo.isEnabled());
System.out.println("Don't change enabled status:");
combo.setEnabled(combo.isEnabled());
}
}
---------- END SOURCE ----------
java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) Client VM (build 14.2-b01, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
A DESCRIPTION OF THE PROBLEM :
1. JComboBox.setEnabled(boolean enabled) fires twice property change event.
This happens because the event is fired also from JComponent.setEnabled(), which is called from the overriding method.
2. JComboBox.setEnabled(...) *always* fires property change event even when enabled status is not changed. Looking at code we see it's bypassing the "changed test" from firePropertyChange, by calling it with different values on purpose: firePropertyChange( "enabled", !isEnabled(), isEnabled() ).
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Call setEnabled(!isEnabled()) on a JComboBox after registering a property change event listener on "enabled" property.
2. Call setEnabled(isEnabled()) on a JComboBox after registering a property change event listener on "enabled" property.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
1. Expected listener to be notified once.
2. Expected no notification on listener.
ACTUAL -
1. Listener is notified twice.
2. Listener is notified even if enabled status didn't change.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.beans.*;
import javax.swing.*;
public class TestJComboBoxEnabled
{
public static void main(String[] args)
{
JComboBox combo = new JComboBox();
combo.addPropertyChangeListener("enabled", new PropertyChangeListener()
{
@Override
public void propertyChange(PropertyChangeEvent evt)
{
System.out.println("Event fired:" + evt.getOldValue() + " -> " + evt.getNewValue());
}
});
System.out.println("Enabled status is: " + combo.isEnabled());
System.out.println("Change enabled status:");
combo.setEnabled(!combo.isEnabled());
System.out.println("Don't change enabled status:");
combo.setEnabled(combo.isEnabled());
}
}
---------- END SOURCE ----------