FileDocCategorySizeDatePackage
AbstractAction.javaAPI DocJava SE 6 API11327Tue Jun 10 00:26:34 BST 2008javax.swing

AbstractAction

public abstract class AbstractAction extends Object implements Action, Serializable, Cloneable
This class provides default implementations for the JFC Action interface. Standard behaviors like the get and set methods for Action object properties (icon, text, and enabled) are defined here. The developer need only subclass this abstract class and define the actionPerformed method.

Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing. As of 1.4, support for long term storage of all JavaBeansTM has been added to the java.beans package. Please see {@link java.beans.XMLEncoder}.

version
1.56 03/28/06
author
Georges Saab
see
Action

Fields Summary
private static Boolean
RECONFIGURE_ON_NULL
Whether or not actions should reconfigure all properties on null.
protected boolean
enabled
Specifies whether action is enabled; the default is true.
private transient ArrayTable
arrayTable
Contains the array of key bindings.
protected SwingPropertyChangeSupport
changeSupport
If any PropertyChangeListeners have been registered, the changeSupport field describes them.
Constructors Summary
public AbstractAction()
Defines an Action object with a default description string and default icon.

    
public AbstractAction(String name)
Defines an Action object with the specified description string and a default icon.

	putValue(Action.NAME, name);
    
public AbstractAction(String name, Icon icon)
Defines an Action object with the specified description string and a the specified icon.

	this(name);
	putValue(Action.SMALL_ICON, icon);
    
Methods Summary
public synchronized voidaddPropertyChangeListener(java.beans.PropertyChangeListener listener)
Adds a PropertyChangeListener to the listener list. The listener is registered for all properties.

A PropertyChangeEvent will get fired in response to setting a bound property, e.g. setFont, setBackground, or setForeground. Note that if the current component is inheriting its foreground, background, or font from its container, then no event will be fired in response to a change in the inherited property.

param
listener The PropertyChangeListener to be added
see
Action#addPropertyChangeListener

        if (changeSupport == null) {
	    changeSupport = new SwingPropertyChangeSupport(this);
        }
        changeSupport.addPropertyChangeListener(listener);
    
protected java.lang.Objectclone()
Clones the abstract action. This gives the clone its own copy of the key/value list, which is not handled for you by Object.clone().

	AbstractAction newAction = (AbstractAction)super.clone();
	synchronized(this) {
	    if (arrayTable != null) {
		newAction.arrayTable = (ArrayTable)arrayTable.clone();
	    }
	}
	return newAction;
    
protected voidfirePropertyChange(java.lang.String propertyName, java.lang.Object oldValue, java.lang.Object newValue)
Supports reporting bound property changes. This method can be called when a bound property has changed and it will send the appropriate PropertyChangeEvent to any registered PropertyChangeListeners.

        if (changeSupport == null || 
	    (oldValue != null && newValue != null && oldValue.equals(newValue))) {
            return;
        }
        changeSupport.firePropertyChange(propertyName, oldValue, newValue);
    
public java.lang.Object[]getKeys()
Returns an array of Objects which are keys for which values have been set for this AbstractAction, or null if no keys have values set.

return
an array of key objects, or null if no keys have values set
since
1.3

	if (arrayTable == null) {
	    return null;
	}
	Object[] keys = new Object[arrayTable.size()];
	arrayTable.getKeys(keys);
	return keys;
    
public synchronized java.beans.PropertyChangeListener[]getPropertyChangeListeners()
Returns an array of all the PropertyChangeListeners added to this AbstractAction with addPropertyChangeListener().

return
all of the PropertyChangeListeners added or an empty array if no listeners have been added
since
1.4

        if (changeSupport == null) {
            return new PropertyChangeListener[0];
        }
        return changeSupport.getPropertyChangeListeners();
    
public java.lang.ObjectgetValue(java.lang.String key)
Gets the Object associated with the specified key.

param
key a string containing the specified key
return
the binding Object stored with this key; if there are no keys, it will return null
see
Action#getValue

        if (key == "enabled") {
            return enabled;
        }
	if (arrayTable == null) {
	    return null;
	}
	return arrayTable.get(key);
    
static booleanhasSelectedKey(javax.swing.Action a)

        return (a != null && a.getValue(Action.SELECTED_KEY) != null);
    
public booleanisEnabled()
Returns true if the action is enabled.

return
true if the action is enabled, false otherwise
see
Action#isEnabled

	return enabled;
    
static booleanisSelected(javax.swing.Action a)

        return Boolean.TRUE.equals(a.getValue(Action.SELECTED_KEY));
    
public voidputValue(java.lang.String key, java.lang.Object newValue)
Sets the Value associated with the specified key.

param
key the String that identifies the stored object
param
newValue the Object to store using this key
see
Action#putValue

	Object oldValue = null;
        if (key == "enabled") {
            // Treat putValue("enabled") the same way as a call to setEnabled.
            // If we don't do this it means the two may get out of sync, and a
            // bogus property change notification would be sent.
            // 
            // To avoid dependencies between putValue & setEnabled this
            // directly changes enabled. If we instead called setEnabled
            // to change enabled, it would be possible for stack
            // overflow in the case where a developer implemented setEnabled
            // in terms of putValue. 
            if (newValue == null || !(newValue instanceof Boolean)) {
                newValue = false;
            }
            oldValue = enabled;
            enabled = (Boolean)newValue;
        } else {
            if (arrayTable == null) {
                arrayTable = new ArrayTable();
            }
            if (arrayTable.containsKey(key))
                oldValue = arrayTable.get(key);
            // Remove the entry for key if newValue is null
            // else put in the newValue for key.
            if (newValue == null) {
                arrayTable.remove(key);
            } else {
                arrayTable.put(key,newValue);
            }
        }
	firePropertyChange(key, oldValue, newValue);
    
private voidreadObject(java.io.ObjectInputStream s)

        s.defaultReadObject();
	for (int counter = s.readInt() - 1; counter >= 0; counter--) {
	    putValue((String)s.readObject(), s.readObject());
	}
    
public synchronized voidremovePropertyChangeListener(java.beans.PropertyChangeListener listener)
Removes a PropertyChangeListener from the listener list. This removes a PropertyChangeListener that was registered for all properties.

param
listener the PropertyChangeListener to be removed
see
Action#removePropertyChangeListener

        if (changeSupport == null) {
            return;
        }
        changeSupport.removePropertyChangeListener(listener);
    
public voidsetEnabled(boolean newValue)
Enables or disables the action.

param
newValue true to enable the action, false to disable it
see
Action#setEnabled

	boolean oldValue = this.enabled;

	if (oldValue != newValue) {
	    this.enabled = newValue;
	    firePropertyChange("enabled", 
			       Boolean.valueOf(oldValue), Boolean.valueOf(newValue));
	}
    
static voidsetEnabledFromAction(javax.swing.JComponent c, javax.swing.Action a)
Sets the enabled state of a component from an Action.

param
c the Component to set the enabled state on
param
a the Action to set the enabled state from, may be null

        c.setEnabled((a != null) ? a.isEnabled() : true);
    
static voidsetToolTipTextFromAction(javax.swing.JComponent c, javax.swing.Action a)
Sets the tooltip text of a component from an Action.

param
c the Component to set the tooltip text on
param
a the Action to set the tooltip text from, may be null

        c.setToolTipText(a != null ?
                         (String)a.getValue(Action.SHORT_DESCRIPTION) : null);
    
static booleanshouldReconfigure(java.beans.PropertyChangeEvent e)
Whether or not to reconfigure all action properties from the specified event.


                     
        
        if (e.getPropertyName() == null) {
            synchronized(AbstractAction.class) {
                if (RECONFIGURE_ON_NULL == null) {
                    RECONFIGURE_ON_NULL = Boolean.valueOf(
                        AccessController.doPrivileged(new GetPropertyAction(
                        "swing.actions.reconfigureOnNull", "false")));
                }
                return RECONFIGURE_ON_NULL;
            }
        }
        return false;
    
private voidwriteObject(java.io.ObjectOutputStream s)

	// Store the default fields
        s.defaultWriteObject();

        // And the keys
        ArrayTable.writeArrayTable(s, arrayTable);