FileDocCategorySizeDatePackage
InputMap.javaAPI DocJava SE 5 API5615Fri Aug 26 14:57:54 BST 2005javax.swing

InputMap

public class InputMap extends Object implements Serializable
InputMap provides a binding between an input event (currently only KeyStrokes are used) and an Object. InputMaps are usually used with an ActionMap, to determine an Action to perform when a key is pressed. An InputMap can have a parent that is searched for bindings not defined in the InputMap.

As with ActionMap if you create a cycle, eg:

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

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

    
Methods Summary
public javax.swing.KeyStroke[]allKeys()
Returns an array of the KeyStrokes defined in this InputMap and its parent. This differs from keys() in that this method includes the keys defined in the parent.

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

	if (count == 0) {
	    if (parent != null) {
		return parent.allKeys();
	    }
	    return keys();
	}
	if (parent == null) {
	    return keys();
	}
	KeyStroke[]    keys = keys();
	KeyStroke[]    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]);
	}

	KeyStroke[]    allKeys = new KeyStroke[keyMap.size()];

	return (KeyStroke[])keyMap.keySet().toArray(allKeys);
    
public voidclear()
Removes all the mappings from this InputMap.

	if (arrayTable != null) {
	    arrayTable.clear();
	}
    
public java.lang.Objectget(javax.swing.KeyStroke keyStroke)
Returns the binding for keyStroke, messaging the parent InputMap if the binding is not locally defined.

	if (arrayTable == null) {
	    InputMap    parent = getParent();

	    if (parent != null) {
		return parent.get(keyStroke);
	    }
	    return null;
	}
	Object value = arrayTable.get(keyStroke);

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

	    if (parent != null) {
		return parent.get(keyStroke);
	    }
	}
	return value;
    
public javax.swing.InputMapgetParent()
Gets this InputMap's parent.

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

	return parent;
    
public javax.swing.KeyStroke[]keys()
Returns the KeyStrokes that are bound in this InputMap.

	if (arrayTable == null) {
	    return null;
	}
	KeyStroke[] keys = new KeyStroke[arrayTable.size()];
	arrayTable.getKeys(keys);
	return keys;
    
public voidput(javax.swing.KeyStroke keyStroke, java.lang.Object actionMapKey)
Adds a binding for keyStroke to actionMapKey. If actionMapKey is null, this removes the current binding for keyStroke.

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

        s.defaultReadObject();
	for (int counter = s.readInt() - 1; counter >= 0; counter--) {
	    put((KeyStroke)s.readObject(), s.readObject());
	}
    
public voidremove(javax.swing.KeyStroke key)
Removes the binding for key from this InputMap.

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

param
map the InputMap 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);