This is a fix for JCheckBoxMenuItem's. The state of the menu item was
never changed when the checkbox menu item was selected or deselected.
2005-10-20 Lillian Angel <[EMAIL PROTECTED]>
* javax/swing/plaf/basic/BasicMenuItemUI.java:
Added new ItemListener field.
(BasicMenuItemUI): Initialized new field.
(installListeners): Installed new listener.
(removeListeners): Removed new listener.
(MenuDragMouseHandler): Class should be private, not
in API.
(MenuKeyHandler): Likewise.
(PropertyChangeHandler): Likewise.
(ItemHandler): New class implemented to change the
state of the menu item if it is a checkbox menu item.
Index: javax/swing/plaf/basic/BasicMenuItemUI.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicMenuItemUI.java,v
retrieving revision 1.30
diff -u -r1.30 BasicMenuItemUI.java
--- javax/swing/plaf/basic/BasicMenuItemUI.java 18 Oct 2005 22:10:32 -0000 1.30
+++ javax/swing/plaf/basic/BasicMenuItemUI.java 20 Oct 2005 18:36:33 -0000
@@ -50,10 +50,13 @@
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
import java.util.ArrayList;
import javax.swing.ButtonModel;
import javax.swing.Icon;
+import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComponent;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
@@ -161,6 +164,11 @@
* PropertyChangeListener to listen for property changes in the menu item
*/
private PropertyChangeListener propertyChangeListener;
+
+ /**
+ * ItemListener to listen for item changes in the menu item
+ */
+ private ItemListener itemListener;
/**
* Number of spaces between accelerator and menu item's label.
@@ -181,6 +189,7 @@
menuDragMouseListener = createMenuDragMouseListener(menuItem);
menuKeyListener = createMenuKeyListener(menuItem);
propertyChangeListener = new PropertyChangeHandler();
+ itemListener = new ItemHandler();
}
/**
@@ -431,6 +440,7 @@
menuItem.addMenuDragMouseListener(menuDragMouseListener);
menuItem.addMenuKeyListener(menuKeyListener);
menuItem.addPropertyChangeListener(propertyChangeListener);
+ menuItem.addItemListener(itemListener);
}
/**
@@ -719,6 +729,7 @@
menuItem.removeMenuDragMouseListener(menuDragMouseListener);
menuItem.removeMenuKeyListener(menuKeyListener);
menuItem.removePropertyChangeListener(propertyChangeListener);
+ menuItem.removeItemListener(itemListener);
}
/**
@@ -949,7 +960,7 @@
/**
* This class handles mouse dragged events.
*/
- protected class MenuDragMouseHandler implements MenuDragMouseListener
+ private class MenuDragMouseHandler implements MenuDragMouseListener
{
/**
* Tbis method is invoked when mouse is dragged over the menu item.
@@ -1010,7 +1021,7 @@
* This class handles key events occuring when menu item is visible on the
* screen.
*/
- protected class MenuKeyHandler implements MenuKeyListener
+ private class MenuKeyHandler implements MenuKeyListener
{
/**
* This method is invoked when key has been pressed
@@ -1051,7 +1062,7 @@
* Helper class that listens for changes to the properties of the [EMAIL PROTECTED]
* JMenuItem}.
*/
- protected class PropertyChangeHandler implements PropertyChangeListener
+ private class PropertyChangeHandler implements PropertyChangeListener
{
/**
* This method is called when one of the menu item's properties change.
@@ -1060,6 +1071,31 @@
*/
public void propertyChange(PropertyChangeEvent evt)
{
+ menuItem.revalidate();
+ menuItem.repaint();
+ }
+ }
+
+ /**
+ * Helper class that listens for item changes to the properties of the [EMAIL PROTECTED]
+ * JMenuItem}.
+ */
+ private class ItemHandler implements ItemListener
+ {
+ /**
+ * This method is called when one of the menu item changes.
+ *
+ * @param evt A [EMAIL PROTECTED] ItemEvent}.
+ */
+ public void itemStateChanged(ItemEvent evt)
+ {
+ boolean state = false;
+ if (menuItem instanceof JCheckBoxMenuItem)
+ {
+ if (evt.getStateChange() == ItemEvent.SELECTED)
+ state = true;
+ ((JCheckBoxMenuItem) menuItem).setState(state);
+ }
menuItem.revalidate();
menuItem.repaint();
}
_______________________________________________
Classpath-patches mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/classpath-patches