[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