FileDocCategorySizeDatePackage
ActionMap.javaAPI DocJava SE 5 API5381Fri Aug 26 14:57:52 BST 2005javax.swing

ActionMap

public class ActionMap extends Object implements Serializable
ActionMap provides mappings from Objects (called keys or Action names) to Actions. An ActionMap is usually used with an InputMap to locate a particular action when a key is pressed. As with InputMap, an ActionMap can have a parent that is searched for keys not defined in the ActionMap.

As with InputMap if you create a cycle, eg:

ActionMap am = new ActionMap();
ActionMap bm = new ActionMap():
am.setParent(bm);
bm.setParent(am);
some of the methods will cause a StackOverflowError to be thrown.
see
InputMap
version
1.14 12/19/03
author
Scott Violet

Fields Summary
private transient ArrayTable
arrayTable
Handles the mapping between Action name and Action.
private ActionMap
parent
Parent that handles any bindings we don't contain.
Constructors Summary
public ActionMap()
Creates an ActionMap with no parent and no mappings.

    
Methods Summary
public java.lang.Object[]allKeys()
Returns an array of the keys defined in this ActionMap and its parent. This method differs from keys() in that this method includes the keys defined in the parent.

	int           count = size();
	ActionMap     parent = getParent();

	if (count == 0) {
	    if (parent != null) {
		return parent.allKeys();
	    }
	    return keys();
	}
	if (parent == null) {
	    return keys();
	}
	Object[]    keys = keys();
	Object[]    pKeys =  parent.allKeys();

	if (pKeys == null) {
	    return keys;
	}
	if (keys == null) {
	    // Should only happen if size() != keys.length, which should only
	    // happen if mutated from multiple threads (or a bogus subclass).
	    return pKeys;
	}

	HashMap        keyMap = new HashMap();
	int            counter;

	for (counter = keys.length - 1; counter >= 0; counter--) {
	    keyMap.put(keys[counter], keys[counter]);
	}
	for (counter = pKeys.length - 1; counter >= 0; counter--) {
	    keyMap.put(pKeys[counter], pKeys[counter]);
	}
	return keyMap.keySet().toArray();
    
public voidclear()
Removes all the mappings from this ActionMap.

	if (arrayTable != null) {
	    arrayTable.clear();
	}
    
public javax.swing.Actionget(java.lang.Object key)
Returns the binding for key, messaging the parent ActionMap if the binding is not locally defined.

	Action value = (arrayTable == null) ? null :
	               (Action)arrayTable.get(key);

	if (value == null) {
	    ActionMap    parent = getParent();

	    if (parent != null) {
		return parent.get(key);
	    }
	}
	return value;
    
public javax.swing.ActionMapgetParent()
Returns this ActionMap's parent.

return
the ActionMap that is the parent of this one, or null if this ActionMap has no parent

	return parent;
    
public java.lang.Object[]keys()
Returns the Action names that are bound in this ActionMap.

	if (arrayTable == null) {
	    return null;
	}
	return arrayTable.getKeys(null);
    
public voidput(java.lang.Object key, javax.swing.Action action)
Adds a binding for key to action. If action is null, this removes the current binding for key.

In most instances, key will be action.getValue(NAME).

	if (key == null) {
	    return;
	}
	if (action == null) {
	    remove(key);
	}
	else {
	    if (arrayTable == null) {
		arrayTable = new ArrayTable();
	    }
	    arrayTable.put(key, action);
	}
    
private voidreadObject(java.io.ObjectInputStream s)

        s.defaultReadObject();
	for (int counter = s.readInt() - 1; counter >= 0; counter--) {
	    put(s.readObject(), (Action)s.readObject());
	}
    
public voidremove(java.lang.Object key)
Removes the binding for key from this ActionMap.

	if (arrayTable != null) {
	    arrayTable.remove(key);
	}
    
public voidsetParent(javax.swing.ActionMap map)
Sets this ActionMap's parent.

param
map the ActionMap that is the parent of this one

	this.parent = map;
    
public intsize()
Returns the number of KeyStroke bindings.

	if (arrayTable == null) {
	    return 0;
	}
	return arrayTable.size();
    
private voidwriteObject(java.io.ObjectOutputStream s)

        s.defaultWriteObject();

        ArrayTable.writeArrayTable(s, arrayTable);