MenuComponent.java: Merged with Classpath.
authorTom Tromey <tromey@redhat.com>
Fri, 18 Jan 2002 01:01:58 +0000 (01:01 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Fri, 18 Jan 2002 01:01:58 +0000 (01:01 +0000)
* java/awt/MenuComponent.java: Merged with Classpath.
* java/awt/MenuItem.java: Merged with Classpath.
* java/awt/Button.java: Merged with Classpath.

From-SVN: r48975

libjava/ChangeLog
libjava/java/awt/Button.java
libjava/java/awt/MenuComponent.java
libjava/java/awt/MenuItem.java

index 3648d9f1f0abd4bb4039ed3339b243ec90edf087..4dece51693b03fb3cef37ca85fbe5f0b7cbb8cda 100644 (file)
@@ -1,5 +1,9 @@
 2002-01-17  Tom Tromey  <tromey@redhat.com>
 
+       * java/awt/MenuComponent.java: Merged with Classpath.
+       * java/awt/MenuItem.java: Merged with Classpath.
+       * java/awt/Button.java: Merged with Classpath.
+
        * java/awt/ActiveEvent.java: Updated copyright.
 
        * java/awt/AWTError.java: Replaced with Classpath version.
index 2544e9e4bea643c37307d24fae557535f04a08d0..1626047bb68ac2f3b21119ce0e9e9240c53d529d 100644 (file)
-/* Copyright (C) 2000  Free Software Foundation
+/* Button.java -- AWT button widget
+   Copyright (C) 1999, 2002 Free Software Foundation, Inc.
 
-   This file is part of libjava.
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
 
-This software is copyrighted work licensed under the terms of the
-Libjava License.  Please consult the file "LIBJAVA_LICENSE" for
-details.  */
 
 package java.awt;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.awt.peer.ButtonPeer;
 import java.awt.peer.ComponentPeer;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
 import java.util.EventListener;
 
 /**
- * @author Tom Tromey <tromey@cygnus.com>
- * @date July 30, 2000
+  * This class provides a button widget for the AWT. 
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  * @author Tom Tromey <tromey@cygnus.com>
+  */
+public class Button extends Component implements java.io.Serializable
+{
+
+/*
+ * Static Variables
+ */
+
+// FIXME: Need readObject/writeObject for serialization
+
+// Serialization version constant
+private static final long serialVersionUID = -8774683716313001058L;
+
+/*************************************************************************/
+
+/*
+ * Instance Variables
+ */
+
+/**
+  * @serial The action command name for this button.
+  */
+private String actionCommand;
+
+/**
+  * @serial The label for this button.
+  */
+private String label;
+
+// List of ActionListeners for this class.
+private transient ActionListener action_listeners;
+
+/*************************************************************************/
+
+/*
+ * Constructors
+ */
+
+/**
+  * Initializes a new instance of <code>Button</code> with no label.
+  */
+public
+Button()
+{
+  this(null);
+}
+
+/*************************************************************************/
+
+/**
+  * Initializes a new instance of <code>Button</code> with the specified
+  * label.  The action command name is also initialized to this value.
+  *
+  * @param label The label to display on the button.
+  */
+public
+Button(String label)
+{
+  this.label = label;
+  actionCommand = label;
+}
+
+/*************************************************************************/
+
+/*
+ * Instance Variables
  */
 
-public class Button extends Component
+/**
+  * Returns the label for this button.
+  *
+  * @return The label for this button.
+  */
+public String
+getLabel()
 {
-  public Button ()
-  {
-    this (null);
-  }
-
-  public Button (String label)
-  {
-    this.label = label;
-  }
-
-  public void addActionListener (ActionListener l)
-  {
-    actionListener = AWTEventMulticaster.add (actionListener, l);
-  }
-
-  public void addNotify ()
-  {
-    if (peer == null)
-      peer = getToolkit ().createButton (this);
-    super.addNotify();
-  }
-
-  public String getActionCommand ()
-  {
-    return actionCommand;
-  }
-
-  public String getLabel ()
-  {
-    return label;
-  }
-
-  protected String paramString ()
-  {
-    return "Button[" + label + "]";
-  }
-
-  void dispatchEventImpl(AWTEvent e)
-  {
-      super.dispatchEventImpl(e);
-      
-      if (e.id <= ActionEvent.ACTION_LAST 
-         && e.id >= ActionEvent.ACTION_FIRST
-         && (actionListener != null 
-             || (eventMask & AWTEvent.ACTION_EVENT_MASK) != 0))
-         processEvent(e);
-  }
-
-  protected void processActionEvent (ActionEvent e)
-  {
-    if (actionListener != null)
-      actionListener.actionPerformed (e);
-  }
-
-  protected void processEvent (AWTEvent e)
-  {
-    if (e instanceof ActionEvent)
-      processActionEvent ((ActionEvent) e);
-    else
-      super.processEvent (e);
-  }
-
-  public void removeActionListener (ActionListener l)
-  {
-    actionListener = AWTEventMulticaster.remove (actionListener, l);
-  }
-
-  public EventListener[] getListeners(Class listenerType)
-  {
-    if (listenerType == ActionListener.class)
-      return getListenersImpl(listenerType, actionListener);
-    return super.getListeners(listenerType);
-  }
-
-  public void setActionCommand (String command)
-  {
-    this.actionCommand = (command == null) ? label : command;
-  }
-
-  public void setLabel (String label)
-  {
-    this.label = label;
-    if (peer != null)
-      {
-       ButtonPeer bp = (ButtonPeer) peer;
-       bp.setLabel (label);
-      }
-  }
-
-  String label;
-  String actionCommand;
-
-  transient ActionListener actionListener;
+  return(label);
 }
+
+/*************************************************************************/
+
+/**
+  * Sets the label for this button to the specified value.
+  *
+  * @param label The new label for this button.
+  */
+public synchronized void
+setLabel(String label)
+{
+  this.label = label;
+  if (peer != null)
+    {
+      ButtonPeer bp = (ButtonPeer) peer;
+      bp.setLabel (label);
+    }
+}
+
+/*************************************************************************/
+
+/**
+  * Returns the action command name for this button.
+  *
+  * @return The action command name for this button.
+  */
+public String
+getActionCommand()
+{
+  return(actionCommand);
+}
+
+/*************************************************************************/
+
+/**
+  * Sets the action command name for this button to the specified value.
+  *
+  * @param actionCommand The new action command name.
+  */
+public void
+setActionCommand(String actionCommand)
+{
+  this.actionCommand = actionCommand == null ? label : actionCommand;
+}
+
+/*************************************************************************/
+
+/**
+  * Adds a new entry to the list of listeners that will receive
+  * action events from this button.
+  *
+  * @param listener The listener to add.
+  */
+public synchronized void
+addActionListener(ActionListener listener)
+{
+  action_listeners = AWTEventMulticaster.add(action_listeners, listener);
+}
+
+/*************************************************************************/
+
+/**
+  * Removes the specified listener from the list of listeners that will
+  * receive action events from this button.
+  * 
+  * @param listener The listener to remove.
+  */
+public synchronized void
+removeActionListener(ActionListener listener)
+{
+  action_listeners = AWTEventMulticaster.remove(action_listeners, listener);
+}
+
+public EventListener[]
+getListeners(Class listenerType)
+{
+  if (listenerType == ActionListener.class)
+    return getListenersImpl(listenerType, action_listeners);
+  return super.getListeners(listenerType);
+}
+
+/*************************************************************************/
+
+/**
+  * Notifies this button that it should create its native peer object.
+  */
+public void
+addNotify()
+{
+  if (peer == null)
+    peer = getToolkit ().createButton (this);
+  super.addNotify();
+}
+
+/*************************************************************************/
+
+/**
+  * Processes an event for this button.  If the specified event is an
+  * instance of <code>ActionEvent</code>, then the
+  * <code>processActionEvent()</code> method is called to dispatch it
+  * to any registered listeners.  Otherwise, the superclass method
+  * will be invoked.  Note that this method will not be called at all
+  * unless <code>ActionEvent</code>'s are enabled.  This will be done
+  * implicitly if any listeners are added.
+  *
+  * @param event The event to process.
+  */
+protected void
+processEvent(AWTEvent event)
+{
+  if (event instanceof ActionEvent)
+    processActionEvent((ActionEvent)event);
+  else
+    super.processEvent(event);
+}
+
+/*************************************************************************/
+
+/**
+  * This method dispatches an action event for this button to any
+  * registered listeners.
+  *
+  * @param event The event to process.
+  */
+protected void
+processActionEvent(ActionEvent event)
+{
+  if (action_listeners != null)
+    action_listeners.actionPerformed(event);
+}
+
+void
+dispatchEventImpl(AWTEvent e)
+{
+  super.dispatchEventImpl(e);
+
+  if (e.id <= ActionEvent.ACTION_LAST 
+      && e.id >= ActionEvent.ACTION_FIRST
+      && (action_listeners != null 
+         || (eventMask & AWTEvent.ACTION_EVENT_MASK) != 0))
+    processEvent(e);
+}
+
+/*************************************************************************/
+
+/**
+  * Returns a debugging string for this button.
+  *
+  * @return A debugging string for this button.
+  */
+protected String
+paramString()
+{
+  return(getClass().getName() + "(label=" + getLabel() + ",actionCommand=" +
+         getActionCommand() + ")");
+}
+
+} // class Button 
+
index a6905ede547d654d955170b8666f7794c13672a5..41a085ffb078c61df359a49196193fde4e3b3ff2 100644 (file)
-/* Copyright (C) 1999, 2000  Free Software Foundation
+/* MenuComponent.java -- Superclass of all AWT menu components
+   Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
 
-   This file is part of libgcj.
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
 
-This software is copyrighted work licensed under the terms of the
-Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
-details.  */
 
 package java.awt;
 
-/* Status: partially complete, untested. */
+import java.awt.peer.MenuComponentPeer;
+
+// FIXME: Java 1.0 event model unimplemented
 
+/**
+  * This is the superclass of all non-menu AWT widgets. 
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
 public abstract class MenuComponent implements java.io.Serializable
 {
-  // Fields from the serialization spec. Decalare others "transient".
-  Font font;
-  String name;
-  boolean nameExplicitlySet;
-  boolean newEventsOnly;
-  //AccessibleContext accessibleContext;
-  
-  transient MenuContainer parent;
-  transient java.awt.peer.MenuComponentPeer peer;
-
-  public MenuComponent()
-  {
-  }
-
-  public String getName()
-  {
-    if (name == null && !nameExplicitlySet)
-      name = generateName();
-    return name;
-  }
-  
-  /** Subclasses should override this to generate unique names like 
-    * "menuitem0".
-    */
-  String generateName()
-  {
-    // MenuComponent is abstract.
-    return null;
-  }
-
-  public void setName(String name)
-  {
-    nameExplicitlySet = true;
-    this.name = name;
-  }
-
-  public MenuContainer getParent()
-  {
-    return parent;
-  }
-
-  /** @deprecated Don't use this. */
-  public java.awt.peer.MenuComponentPeer getPeer()
-  {
-    return peer;
-  }
-
-  public Font getFont()
-  {
-    return font;
-  }
-
-  public void setFont(Font f)
-  {
-    this.font = f;
-  }
-
-  public void removeNotify()
-  {
-    if (peer != null)
-      peer.dispose ();
-    peer = null;
-  }
-
-  /** @deprecated Replaced by dispatchEvent(AWTEvent) */
-  public boolean postEvent(Event evt)
-  {
-    return false;
-  }
-
-  public final void dispatchEvent(AWTEvent e)
-  {
-    // FIXME
-    dispatchEventImpl(e);
-  }
-  
-  void dispatchEventImpl(AWTEvent e)
-  {
-    // This is overridden by subclasses that support events.
-  }
-
-  protected void processEvent(AWTEvent e)
-  {
-    // Nothing to do here? This is be overridden by subclasses that 
-    // support events.
-  }
-
-  protected String paramString()
-  {
-    return name;
-  }
-
-  public String toString()
-  {
-    return this.getClass().getName() + "[" + paramString() + "]";
-  }
-
-  protected final Object getTreeLock()
-  {
-    // FIXME: figure out how the tree lock works.
-    return null;
-  }
-
-  // Accessibility API not yet implemented.
-  // public AccessibleContext getAccessibleContext()
+
+/*
+ * Static Variables
+ */
+
+// Serialization Constant
+private static final long serialVersionUID = -4536902356223894379L;
+
+/*************************************************************************/
+
+/*
+ * Instance Variables
+ */
+
+  // FIXME: missing serialized fields `nameExplicitlySet',
+  // `newEventsOnly', and `accessibleContext'.
+
+// The font for this component
+private Font font;
+
+// The name of the component
+private String name;
+
+// The parent of this component
+transient MenuContainer parent;
+
+// The native peer for this componet
+transient MenuComponentPeer peer;
+
+// The synchronization locking object for this component
+private transient Object tree_lock = this;
+
+// The toolkit for this object
+private static transient Toolkit toolkit = Toolkit.getDefaultToolkit();
+
+/*************************************************************************/
+
+/*
+ * Constructors
+ */
+
+/**
+  * Default constructor for subclasses.
+  */
+protected
+MenuComponent()
+{
 }
+
+/*************************************************************************/
+
+/*
+ * Instance Methods
+ */
+
+/**
+  * Returns the font in use for this component.
+  *
+  * @return The font for this component.
+  */
+public Font
+getFont()
+{
+  return(font);
+}
+
+/*************************************************************************/
+
+/**
+  * Sets the font for this component to the specified font.
+  *
+  * @param font The new font for this component.
+  */
+public void
+setFont(Font font)
+{
+  this.font = font;
+}
+
+/*************************************************************************/
+
+/**
+  * Returns the name of this component.
+  *
+  * @return The name of this component.
+  */
+public String
+getName()
+{
+  return(name);
+}
+
+/*************************************************************************/
+
+/**
+  * Sets the name of this component to the specified name.
+  *
+  * @param name The new name of this component.
+  */
+public void
+setName(String name)
+{
+  this.name = name;
+}
+
+/*************************************************************************/
+
+/**
+  * Returns the parent of this component.
+  * 
+  * @return The parent of this component.
+  */
+public MenuContainer
+getParent()
+{
+  return(parent);
+} 
+
+/*************************************************************************/
+
+// Sets the parent of this component.
+final void
+setParent(MenuContainer parent)
+{
+  this.parent = parent;
+}
+
+/*************************************************************************/
+
+/**
+  * Returns the native windowing system peer for this component.
+  *
+  * @return The peer for this component.
+  */
+public MenuComponentPeer
+getPeer()
+{
+  return(peer);
+}
+
+/*************************************************************************/
+
+// Sets the peer for this component.
+final void
+setPeer(MenuComponentPeer peer)
+{
+  this.peer = peer;
+}
+
+/*************************************************************************/
+
+/**
+  * Destroys this component's native peer
+  */
+public void
+removeNotify()
+{
+  if (peer != null)
+    peer.dispose();
+  peer = null;
+}
+
+/*************************************************************************/
+
+/**
+  * Returns the toolkit in use for this component.
+  *
+  * @return The toolkit for this component.
+  */
+final Toolkit
+getToolkit()
+{
+  return(toolkit);
+}
+
+/*************************************************************************/
+
+/**
+  * Returns the object used for synchronization locks on this component
+  * when performing tree and layout functions.
+  *
+  * @return The synchronization lock for this component.
+  */
+public final Object
+getTreeLock()
+{
+  return(tree_lock);
+}
+
+/*************************************************************************/
+
+// The sync lock object for this component.
+final void
+setTreeLock(Object tree_lock)
+{
+  this.tree_lock = tree_lock;
+}
+
+/*************************************************************************/
+
+/**
+  * AWT 1.0 event dispatcher.
+  *
+  * @deprecated Deprecated in favor of <code>dispatchEvent()</code>.
+  */
+public boolean
+postEvent(Event event)
+{
+  return(false);
+}
+
+/*************************************************************************/
+
+/**
+  * Sends this event to this component or a subcomponent for processing.
+  *
+  * @param event The event to dispatch
+  */
+public final void
+dispatchEvent(AWTEvent event)
+{
+  // See comment in Component.dispatchEvent().
+  dispatchEventImpl(event);
+}
+
+void
+dispatchEventImpl(AWTEvent e)
+{
+  // This is overridden by subclasses that support events.
+}
+
+/*************************************************************************/
+
+/**
+  * Processes the specified event.  In this class, this method simply
+  * calls one of the more specific event handlers.
+  * 
+  * @param event The event to process.
+  */
+protected void
+processEvent(AWTEvent event)
+{
+}
+
+/*************************************************************************/
+
+/**
+  * Returns a string representation of this component.
+  *
+  * @return A string representation of this component
+  */
+public String
+toString()
+{
+  return(getClass().getName() + "(" + getName() + ")");
+}
+
+/*************************************************************************/
+
+/**
+  * Returns a debugging string for this component
+  */
+protected String
+paramString()
+{
+  return(toString());
+}
+
+// Accessibility API not yet implemented.
+// public AccessibleContext getAccessibleContext()
+
+} // class Component
index b127bfa87a70bde789671da7a12d46d1aafe5c05..538dbcfe189ca7223dd5cec403d3d159808b4880 100644 (file)
-/* Copyright (C) 1999, 2000, 2001  Free Software Foundation
+/* MenuItem.java -- An item in a menu
+   Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
 
-   This file is part of libgcj.
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
 
-This software is copyrighted work licensed under the terms of the
-Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
-details.  */
 
 package java.awt;
-import java.awt.event.*;
-import java.util.EventListener;
+
 import java.awt.peer.MenuItemPeer;
+import java.awt.peer.MenuComponentPeer;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.EventListener;
+
+/**
+  * This class represents an item in a menu.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public class MenuItem extends MenuComponent implements java.io.Serializable
+{
+
+// FIXME: The enabled event mask is not used at this time.
+
+/*
+ * Static Variables
+ */
+
+// Serialization Constant
+private static final long serialVersionUID = -21757335363267194L;
+
+/*************************************************************************/
+
+/*
+ * Instance Variables
+ */
+
+/**
+  * @serial The name of the action command generated by this item.
+  */
+private String actionCommand;
+
+/**
+  * @serial Indicates whether or not this menu item is enabled.
+  */
+private boolean enabled;
 
-public class MenuItem extends MenuComponent
-{
-  // Fields from the serialization spec. Decalare others "transient".
-  boolean enabled;
-  String label;
-  String actionCommand;
-  long eventMask;
-  MenuShortcut shortcut;
-  int menuItemSerializedDataVersion;
-
-  transient ActionListener actionListener;
-
-  public MenuItem ()
-  {
-    this.label = "";
-  }
-
-  public MenuItem (String label)
-  {
-    this.label = label;
-  }
-
-  public MenuItem (String label, MenuShortcut shortcut)
-  {
-    this.label = label;
-    this.shortcut = shortcut;
-  }
-
-  public String getLabel()
-  {
-    return label;
-  }
-
-  public synchronized void setLabel(String label)
-  {
-    this.label = label;
-    if (peer != null)
-      {
-       MenuItemPeer mp = (MenuItemPeer) peer;
-       mp.setLabel (label);
-      }
-  }
-
-  public boolean isEnabled()
-  {
-    return enabled;
-  }
-
-  public synchronized void setEnabled(boolean b)
-  {
-    // The JCL says this method is ignored if the enabled state does
-    // not change.  I take that to mean that the peer is not notified
-    // in this case.
-    if (this.enabled != b)
-      {
-       this.enabled = b;
-       if (peer != null)
-         {
-           MenuItemPeer mp = (MenuItemPeer) peer;
-           mp.setEnabled (b);
-         }
-      }
-  }
-
-  /** @deprecated Use setEnabled() instead. */
-  public void enable()
-  {
-    setEnabled(true);
-  }
-
-  /** @deprecated Use setEnabled() instead. */
-  public void enable(boolean b)
-  {
-    setEnabled(b);
-  }
-
-  /** @deprecated Use setEnabled() instead. */
-  public void disable()
-  {
-    setEnabled(false);
-  }
-
-  public MenuShortcut getShortcut()
-  {
-    return shortcut;
-  }
-
-  public void setShortcut(MenuShortcut s)
-  {
-    this.shortcut = s;
-  }
-
-  public void deleteShortcut()
-  {
-    setShortcut(null);
-  }
-
-  protected final void enableEvents(long eventsToEnable)
-  {
-    eventMask |= eventsToEnable;
-    // TODO: see comment in Component.enableEvents().    
-  }
-
-  protected final void disableEvents(long eventsToDisable)
-  {
-    eventMask &= ~eventsToDisable;    
-  }
-
-  public void setActionCommand(String command)
-  {
-    this.actionCommand = command;
-  }
-
-  public String getActionCommand()
-  {
-    return actionCommand;
-  }
-
-  public synchronized void addActionListener(ActionListener l)
-  {
-    actionListener = AWTEventMulticaster.add(actionListener, l);
-    if (actionListener != null)
-      enableEvents(AWTEvent.ACTION_EVENT_MASK);
-  }
-
-  public synchronized void removeActionListener(ActionListener l)
-  {
-    actionListener = AWTEventMulticaster.remove(actionListener, l);
-  }
-
-  public void addNotify ()
-  {
-    if (peer != null)
-      {
-       // This choice of toolkit seems unsatisfying, but I'm not sure
-       // what else to do.
-       peer = Toolkit.getDefaultToolkit ().createMenuItem (this);
-      }
-  }
-
-  /** Returns all registered EventListers of the given listenerType. 
-    * listenerType must be a subclass of EventListener, or a 
-    * ClassClassException is thrown.
-    * @since 1.3 
-    */
-  public EventListener[] getListeners(Class listenerType)
-  {
-    if (listenerType == ActionListener.class)
-      return Component.getListenersImpl(listenerType, actionListener);
-    else
-      return Component.getListenersImpl(listenerType, null);
-  }
-
-  void dispatchEventImpl(AWTEvent e)
-  {
-    if (e.id <= ActionEvent.ACTION_LAST 
-       && e.id >= ActionEvent.ACTION_FIRST
-       && (actionListener != null
-           || (eventMask & AWTEvent.ACTION_EVENT_MASK) != 0))
-      processEvent(e);
-  }
-
-  protected void processEvent(AWTEvent e)
-  {
-    if (e instanceof ActionEvent)
-      processActionEvent((ActionEvent) e);
-  }
-
-  protected void processActionEvent(ActionEvent e)
-  {
-    if (actionListener != null)
-      actionListener.actionPerformed(e);
-  }
-
-  public String paramString()
-  {
-    return name + ",label=" + label;
-  }
-
-  // Accessibility API not yet implemented.
-  // public AccessibleContext getAccessibleContext()
+/**
+  * @serial The mask of events that are enabled for this menu item.
+  */
+private long eventMask;
+
+/**
+  * @serial This menu item's label
+  */
+private String label;
+
+/**
+  * @serial The shortcut for this menu item, if any
+  */
+private MenuShortcut shortcut;
+
+// The list of action listeners for this menu item.
+private transient ActionListener action_listeners;
+
+/*************************************************************************/
+
+/*
+ * Constructors
+ */
+
+/**
+  * Initializes a new instance of <code>MenuItem</code> with no label
+  * and no shortcut.
+  */
+public
+MenuItem()
+{
+}
+
+/*************************************************************************/
+
+/**
+  * Initializes a new instance of <code>MenuItem</code> with the specified
+  * label and no shortcut.
+  *
+  * @param label The label for this menu item.
+  */
+public 
+MenuItem(String label)
+{
+  this.label = label;
+}
+
+/*************************************************************************/
+
+/**
+  * Initializes a new instance of <code>MenuItem</code> with the specified
+  * label and shortcut.
+  *
+  * @param label The label for this menu item.
+  * @param shortcut The shortcut for this menu item.
+  */
+public
+MenuItem(String label, MenuShortcut shortcut)
+{
+  this.label = label;
+  this.shortcut = shortcut;
+}
+
+/*************************************************************************/
+
+/*
+ * Instance Methods
+ */
+
+/**
+  * Returns the label for this menu item, which may be <code>null</code>.
+  *
+  * @return The label for this menu item.
+  */
+public String
+getLabel()
+{
+  return(label);
+}
+
+/*************************************************************************/
+
+/**
+  * This method sets the label for this menu to the specified value.
+  *
+  * @param label The new label for this menu item.
+  */
+public synchronized void
+setLabel(String label)
+{
+  this.label = label;
+  if (peer != null)
+    {
+      MenuItemPeer mp = (MenuItemPeer) peer;
+      mp.setLabel (label);
+    }
+}
+
+/*************************************************************************/
+
+/**
+  * Tests whether or not this menu item is enabled.
+  *
+  * @return <code>true</code> if this menu item is enabled, <code>false</code>
+  * otherwise.
+  */
+public boolean
+isEnabled()
+{
+  return(enabled);
+}
+
+/*************************************************************************/
+
+/**
+  * Sets the enabled status of this menu item.
+  * 
+  * @param enabled <code>true</code> to enable this menu item,
+  * <code>false</code> otherwise.
+  */
+public synchronized void
+setEnabled(boolean enabled)
+{
+  if (enabled == this.enabled)
+    return;
+
+  this.enabled = enabled;
+  if (peer != null)
+    {
+      MenuItemPeer mp = (MenuItemPeer) peer;
+      mp.setEnabled (enabled);
+    }
+}
+
+/*************************************************************************/
+
+/**
+  * Sets the enabled status of this menu item.
+  * 
+  * @param enabled <code>true</code> to enable this menu item,
+  * <code>false</code> otherwise.
+  *
+  * @deprecated This method is deprecated in favor of <code>setEnabled()</code>.
+  */
+public void
+enable(boolean enabled)
+{
+  setEnabled(enabled);
+}
+
+/*************************************************************************/
+
+/**
+  * Enables this menu item.
+  *
+  * @deprecated This method is deprecated in favor of <code>setEnabled()</code>.
+  */
+public void
+enable()
+{
+  setEnabled(true);
+}
+
+/*************************************************************************/
+
+/**
+  * Disables this menu item.
+  *
+  * @deprecated This method is deprecated in favor of <code>setEnabled()</code>.
+  */
+public void
+disable()
+{
+  setEnabled(false);
 }
+
+/*************************************************************************/
+
+/**
+  * Returns the shortcut for this menu item, which may be <code>null</code>.
+  *
+  * @return The shortcut for this menu item.
+  */
+public MenuShortcut
+getShortcut()
+{
+  return(shortcut);
+}
+
+/*************************************************************************/
+
+/**
+  * Sets the shortcut for this menu item to the specified value.  This
+  * must be done before the native peer is created.
+  *
+  * @param shortcut The new shortcut for this menu item.
+  */
+public void
+setShortcut(MenuShortcut shortcut)
+{
+  this.shortcut = shortcut;
+}
+
+/*************************************************************************/
+
+/**
+  * Deletes the shortcut for this menu item if one exists.  This must be
+  * done before the native peer is created.
+  */
+public void
+deleteShortcut()
+{
+  shortcut = null;
+}
+
+/*************************************************************************/
+
+/**
+  * Returns the name of the action command in the action events
+  * generated by this menu item.
+  *
+  * @return The action command name
+  */
+public String
+getActionCommand()
+{
+  return(actionCommand);
+}
+
+/*************************************************************************/
+
+/**
+  * Sets the name of the action command in the action events generated by
+  * this menu item.
+  *
+  * @param actionCommand The new action command name.
+  */
+public void
+setActionCommand(String actionCommand)
+{
+  this.actionCommand = actionCommand;
+}
+
+/*************************************************************************/
+
+/**
+  * Enables the specified events.  This is done automatically when a 
+  * listener is added and does not normally need to be done by
+  * application code.
+  *
+  * @param events The events to enable, which should be the bit masks
+  * from <code>AWTEvent</code>.
+  */
+protected final void
+enableEvents(long events)
+{
+  eventMask |= events;
+  // TODO: see comment in Component.enableEvents().    
+}
+
+/*************************************************************************/
+
+/**
+  * Disables the specified events.
+  *
+  * @param events The events to enable, which should be the bit masks
+  * from <code>AWTEvent</code>.
+  */
+protected final void
+disableEvents(long events)
+{
+  eventMask &= ~events;
+}
+
+/*************************************************************************/
+
+/**
+  * Creates the native peer for this object.
+  */
+public void
+addNotify()
+{
+  if (peer != null)
+    peer = getToolkit ().createMenuItem (this);
+}
+
+/*************************************************************************/
+
+/**
+  * Adds the specified listener to the list of registered action listeners
+  * for this component.
+  *
+  * @param listener The listener to add.
+  */
+public synchronized void
+addActionListener(ActionListener listener)
+{
+  action_listeners = AWTEventMulticaster.add(action_listeners, listener);
+
+  enableEvents(AWTEvent.ACTION_EVENT_MASK);
+}
+
+public synchronized void
+removeActionListener(ActionListener l)
+{
+  action_listeners = AWTEventMulticaster.remove(action_listeners, l);
+}
+
+/** Returns all registered EventListers of the given listenerType. 
+ * listenerType must be a subclass of EventListener, or a 
+ * ClassClassException is thrown.
+ * @since 1.3 
+ */
+public EventListener[]
+getListeners(Class listenerType)
+{
+  if (listenerType == ActionListener.class)
+    return Component.getListenersImpl(listenerType, action_listeners);
+  else
+    return Component.getListenersImpl(listenerType, null);
+}
+
+/*************************************************************************/
+
+void
+dispatchEventImpl(AWTEvent e)
+{
+  if (e.id <= ActionEvent.ACTION_LAST 
+      && e.id >= ActionEvent.ACTION_FIRST
+      && (action_listeners != null
+         || (eventMask & AWTEvent.ACTION_EVENT_MASK) != 0))
+    processEvent(e);
+}
+
+/**
+  * Processes the specified event by calling <code>processActionEvent()</code>
+  * if it is an instance of <code>ActionEvent</code>.
+  *
+  * @param event The event to process.
+  */
+protected void
+processEvent(AWTEvent event)
+{
+  if (event instanceof ActionEvent)
+    processActionEvent((ActionEvent)event);
+}
+
+/*************************************************************************/
+
+/**
+  * Processes the specified event by dispatching it to any registered listeners.
+  *
+  * @param event The event to process.
+  */
+protected void
+processActionEvent(ActionEvent event)
+{
+  if (action_listeners != null)
+    action_listeners.actionPerformed(event);
+}
+
+/*************************************************************************/
+
+/**
+  * Returns a debugging string for this object.
+  *
+  * @return A debugging string for this object.
+  */
+public String
+paramString()
+{
+  return(getClass().getName() + "(label+" + label + ",enabled=" + enabled +
+         ",actionCommand=" + actionCommand + ")");
+}
+
+// Accessibility API not yet implemented.
+// public AccessibleContext getAccessibleContext()
+
+} // class MenuItem