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

Reply via email to