[Patch][gui] swing menu fixes

Michael Koch konqueror@gmx.de
Fri Jan 28 10:48:00 GMT 2005


Hi list,


I tried to start up JUMP (http://www.jump-project.org/) with out Swing.
While debugging this I fixed several menu issues in our Swing code.
This patch fixes them.


Michael


2005-01-28  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JMenu.java
	(uiClassID): Removed.
	(JMenu): Set invoker on popup menu.
	(getUIClassID): Return id directly.
	(getItemCount): Simply return getMenuComponentCount().
	Fixed javadoc.
	(isTopLevelMenu): Simplified.
	* javax/swing/JMenuItem.java
	(uiClassID): Removed.
	(getUIClassID): Return id directly.
	* javax/swing/JPopupMenu.java
	(uiClassID): Removed.
	(JPopupMenu): Always initialize correctly.
	(getSubElements): Only return components implementing MenuElement
	interface.
	(HeavyWeightPopup.hide): Removed.

-------------- next part --------------
Index: javax/swing/JMenu.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/javax/swing/JMenu.java,v
retrieving revision 1.3.8.15
diff -u -r1.3.8.15 JMenu.java
--- javax/swing/JMenu.java	27 Dec 2004 11:25:01 -0000	1.3.8.15
+++ javax/swing/JMenu.java	28 Jan 2005 10:42:41 -0000
@@ -1,5 +1,5 @@
 /* JMenu.java --
-   Copyright (C) 2002, 2004  Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -77,9 +77,6 @@
 {
   private static final long serialVersionUID = 4227225638931828014L;
 
-  /** name for the UI delegate for this menu. */
-  private static final String uiClassID = "MenuUI";
-
   /** A Popup menu associated with this menu, which pops up when menu is selected */
   private JPopupMenu popupMenu = new JPopupMenu();
 
@@ -107,30 +104,32 @@
   }
 
   /**
-   * Creates a new JMenu with the spicified label
+   * Creates a new <code>JMenu</code> with the specified label.
    *
    * @param text label for this menu
    */
   public JMenu(String text)
   {
     super(text);
+    popupMenu.setInvoker(this);
   }
 
   /**
-   * Creates a new JMenu object
+   * Creates a new <code>JMenu</code> object.
    *
-   * @param action Action that  is used to create menu item tha will be
+   * @param action Action that is used to create menu item tha will be
    * added to the menu.
    */
   public JMenu(Action action)
   {
     super(action);
     createActionChangeListener(this);
+    popupMenu.setInvoker(this);
   }
 
   /**
-   * Creates a new JMenu with specified label and an option
-   * for this menu to be tear-off menu
+   * Creates a new <code>JMenu</code> with specified label and an option
+   * for this menu to be tear-off menu.
    *
    * @param text label for this menu
    * @param tearoff true if this menu should be tear-off and false otherwise
@@ -312,7 +311,7 @@
    */
   public String getUIClassID()
   {
-    return uiClassID;
+    return "MenuUI";
   }
 
   /**
@@ -388,8 +387,8 @@
   /**
    * Checks if PopupMenu associated with this menu is visible
    *
-   * @return true if the popup associated with this menu is currently visible on the screen and
-   * false otherwise.
+   * @return true if the popup associated with this menu is currently visible
+   * on the screen and false otherwise.
    */
   public boolean isPopupMenuVisible()
   {
@@ -528,15 +527,15 @@
   }
 
   /**
-   * Returns number of items in the menu
+   * Returns number of items in the menu including separators.
    *
    * @return number of items in the menu
+   *
+   * @see #getMenuComponentCount()
    */
   public int getItemCount()
   {
-    // returns the number of items on 
-    // the menu, including separators.
-    return getComponents().length;
+    return getMenuComponentCount();
   }
 
   /**
@@ -592,10 +591,7 @@
    */
   public boolean isTopLevelMenu()
   {
-    if (getParent() instanceof JMenuBar)
-      return true;
-    else
-      return false;
+    return getParent() instanceof JMenuBar;
   }
 
   /**
Index: javax/swing/JMenuItem.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/javax/swing/JMenuItem.java,v
retrieving revision 1.2.18.17
diff -u -r1.2.18.17 JMenuItem.java
--- javax/swing/JMenuItem.java	10 Nov 2004 07:19:48 -0000	1.2.18.17
+++ javax/swing/JMenuItem.java	28 Jan 2005 10:42:41 -0000
@@ -1,5 +1,5 @@
 /* JMenuItem.java --
-   Copyright (C) 2002, 2004  Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -60,9 +60,7 @@
 import javax.swing.event.MenuKeyListener;
 import javax.swing.plaf.MenuItemUI;
 
-
 /**
- * <p>
  * JMenuItem represents element in the menu. It inherits most of
  * its functionality from AbstractButton, however its behavior somewhat
  * varies from it. JMenuItem fire different kinds of events.
@@ -71,16 +69,12 @@
  * fired when menu item is selected. In addition to this events menuItem also
  * fire MenuDragMouseEvent and MenuKeyEvents when mouse is dragged over
  * the menu item or associated key with menu item is invoked respectively.
- * </p>
  */
 public class JMenuItem extends AbstractButton implements Accessible,
                                                          MenuElement
 {
   private static final long serialVersionUID = -1681004643499461044L;
 
-  /** name for the UI delegate for this menuItem. */
-  private static final String uiClassID = "MenuItemUI";
-
   /** Combination of keyboard keys that can be used to activate this menu item */
   private KeyStroke accelerator;
 
@@ -212,7 +206,7 @@
    */
   public String getUIClassID()
   {
-    return uiClassID;
+    return "MenuItemUI";
   }
 
   /**
Index: javax/swing/JPopupMenu.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/javax/swing/JPopupMenu.java,v
retrieving revision 1.3.8.17
diff -u -r1.3.8.17 JPopupMenu.java
--- javax/swing/JPopupMenu.java	26 Jan 2005 23:33:32 -0000	1.3.8.17
+++ javax/swing/JPopupMenu.java	28 Jan 2005 10:42:41 -0000
@@ -53,6 +53,7 @@
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
+import java.util.ArrayList;
 import java.util.EventListener;
 
 import javax.accessibility.Accessible;
@@ -92,9 +93,6 @@
 {
   private static final long serialVersionUID = -8336996630009646009L;
 
-  /** name for the UI delegate for this menuItem. */
-  private static final String uiClassID = "PopupMenuUI";
-
   /* indicates if popup's menu border should be painted*/
   private boolean borderPainted = true;
 
@@ -144,11 +142,7 @@
    */
   public JPopupMenu()
   {
-    updateUI();
-
-    lightWeightPopupEnabled = DefaultLightWeightPopupEnabled;
-    selectionModel = new DefaultSingleSelectionModel();
-    super.setVisible(false);
+    this(null);
   }
 
   /**
@@ -158,7 +152,11 @@
    */
   public JPopupMenu(String label)
   {
+    lightWeightPopupEnabled = getDefaultLightWeightPopupEnabled();
     setLabel(label);
+    setSelectionModel(new DefaultSingleSelectionModel());
+    super.setVisible(false);
+    updateUI();
   }
 
   private void readObject(ObjectInputStream stream)
@@ -821,19 +819,22 @@
   }
 
   /**
-   * Return subcomonents of this popup menu.
+   * Return subcomonents of this popup menu. This method returns only
+   * components that implement the <code>MenuElement</code> interface.
    *
-   * @return Array containing menuItem's of belonging to this popup menu.
+   * @return array of menu items belonging to this popup menu
    */
   public MenuElement[] getSubElements()
   {
     Component[] items = getComponents();
-    MenuElement[] subElements = new MenuElement[items.length];
+    ArrayList subElements = new ArrayList();
 
     for (int i = 0; i < items.length; i++)
-      subElements[i] = (MenuElement) items[i];
+      if (items[i] instanceof MenuElement)
+	subElements.add(items[i]);
 
-    return subElements;
+    return (MenuElement[])
+      subElements.toArray(new MenuElement[subElements.size()]);
   }
 
   /**
@@ -1020,14 +1021,6 @@
       this.setBounds(x, y, width, height);
       this.show();
     }
-
-    /**
-     * Hides JWindow with menu item's from the screen.
-     */
-    public void hide()
-    {
-      super.hide();
-    }
   }
 
   /**


More information about the Java-patches mailing list