/* * @(#)Action.java 1.30 03/12/19 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package javax.swing; import java.awt.*; import java.awt.event.*; import java.beans.*; /** * The Action interface provides a useful extension to the * ActionListener * interface in cases where the same functionality may be accessed by * several controls. *

* In addition to the actionPerformed method defined by the * ActionListener interface, this interface allows the * application to define, in a single place: *

* Certain containers, including menus and tool bars, know how to add an * Action object. When an Action object is added * to such a container, the container: *
    *
  1. Creates a component that is appropriate for that container * (a tool bar creates a button component, for example). *
  2. Gets the appropriate property(s) from the Action object to * customize the component (for example, the icon image and flyover text). *
  3. Checks the initial state of the Action object to determine * if it is enabled or disabled, and renders the component in the * appropriate fashion. *
  4. Registers a listener with the Action object so that is * notified of state changes. When the Action object changes * from enabled to disabled, * or back, the container makes the appropriate revisions to the * event-generation mechanisms and renders the component accordingly. *
* For example, both a menu item and a toolbar button could access a * Cut action object. The text associated with the object is * specified as "Cut", and an image depicting a pair of scissors is specified * as its icon. The Cut action-object can then be added to a * menu and to a tool bar. Each container does the appropriate things with the * object, and invokes its actionPerformed method when the * component associated with it is activated. The application can then disable * or enable the application object without worrying about what user-interface * components are connected to it. *

* This interface can be added to an existing class or used to create an * adapter (typically, by subclassing AbstractAction). * The Action object * can then be added to multiple Action-aware containers * and connected to Action-capable * components. The GUI controls can then be activated or * deactivated all at once by invoking the Action object's * setEnabled method. *

* Note that Action implementations tend to be more expensive * in terms of storage than a typical ActionListener, * which does not offer the benefits of centralized control of * functionality and broadcast of property changes. For this reason, * you should take care to only use Actions where their benefits * are desired, and use simple ActionListeners elsewhere. * * @version 1.30 12/19/03 * @author Georges Saab * @see AbstractAction */ public interface Action extends ActionListener { /** * Useful constants that can be used as the storage-retrieval key * when setting or getting one of this object's properties (text * or icon). */ /** * Not currently used. */ public static final String DEFAULT = "Default"; /** * The key used for storing the String name * for the action, used for a menu or button. */ public static final String NAME = "Name"; /** * The key used for storing a short String * description for the action, used for tooltip text. */ public static final String SHORT_DESCRIPTION = "ShortDescription"; /** * The key used for storing a longer String * description for the action, could be used for context-sensitive help. */ public static final String LONG_DESCRIPTION = "LongDescription"; /** * The key used for storing a small Icon, such * as ImageIcon, for the action, used for toolbar buttons. */ public static final String SMALL_ICON = "SmallIcon"; /** * The key used to determine the command String for the * ActionEvent that will be created when an * Action is going to be notified as the result of * residing in a Keymap associated with a * JComponent. */ public static final String ACTION_COMMAND_KEY = "ActionCommandKey"; /** * The key used for storing a KeyStroke to be used as the * accelerator for the action. * * @since 1.3 */ public static final String ACCELERATOR_KEY="AcceleratorKey"; /** * The key used for storing a KeyEvent to be used as * the mnemonic for the action. * * @since 1.3 */ public static final String MNEMONIC_KEY="MnemonicKey"; /** * Gets one of this object's properties * using the associated key. * @see #putValue */ public Object getValue(String key); /** * Sets one of this object's properties * using the associated key. If the value has * changed, a PropertyChangeEvent is sent * to listeners. * * @param key a String containing the key * @param value an Object value */ public void putValue(String key, Object value); /** * Sets the enabled state of the Action. When enabled, * any component associated with this object is active and * able to fire this object's actionPerformed method. * If the value has changed, a PropertyChangeEvent is sent * to listeners. * * @param b true to enable this Action, false to disable it */ public void setEnabled(boolean b); /** * Returns the enabled state of the Action. When enabled, * any component associated with this object is active and * able to fire this object's actionPerformed method. * * @return true if this Action is enabled */ public boolean isEnabled(); /** * Adds a PropertyChange listener. Containers and attached * components use these methods to register interest in this * Action object. When its enabled state or other property * changes, the registered listeners are informed of the change. * * @param listener a PropertyChangeListener object */ public void addPropertyChangeListener(PropertyChangeListener listener); /** * Removes a PropertyChange listener. * * @param listener a PropertyChangeListener object * @see #addPropertyChangeListener */ public void removePropertyChangeListener(PropertyChangeListener listener); }