001 /*
002 * Copyright 1999-2006 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025 package javax.swing;
026
027 /**
028 * A <code>ComponentInputMap</code> is an <code>InputMap</code>
029 * associated with a particular <code>JComponent</code>.
030 * The component is automatically notified whenever
031 * the <code>ComponentInputMap</code> changes.
032 * <code>ComponentInputMap</code>s are used for
033 * <code>WHEN_IN_FOCUSED_WINDOW</code> bindings.
034 *
035 * @version 1.17 05/05/07
036 * @author Scott Violet
037 * @since 1.3
038 */
039 public class ComponentInputMap extends InputMap {
040 /** Component binding is created for. */
041 private JComponent component;
042
043 /**
044 * Creates a <code>ComponentInputMap</code> associated with the
045 * specified component.
046 *
047 * @param component a non-null <code>JComponent</code>
048 * @throws IllegalArgumentException if <code>component</code> is null
049 */
050 public ComponentInputMap(JComponent component) {
051 this .component = component;
052 if (component == null) {
053 throw new IllegalArgumentException(
054 "ComponentInputMaps must be associated with a non-null JComponent");
055 }
056 }
057
058 /**
059 * Sets the parent, which must be a <code>ComponentInputMap</code>
060 * associated with the same component as this
061 * <code>ComponentInputMap</code>.
062 *
063 * @param map a <code>ComponentInputMap</code>
064 *
065 * @throws IllegalArgumentException if <code>map</code>
066 * is not a <code>ComponentInputMap</code>
067 * or is not associated with the same component
068 */
069 public void setParent(InputMap map) {
070 if (getParent() == map) {
071 return;
072 }
073 if (map != null
074 && (!(map instanceof ComponentInputMap) || ((ComponentInputMap) map)
075 .getComponent() != getComponent())) {
076 throw new IllegalArgumentException(
077 "ComponentInputMaps must have a parent ComponentInputMap associated with the same component");
078 }
079 super .setParent(map);
080 getComponent().componentInputMapChanged(this );
081 }
082
083 /**
084 * Returns the component the <code>InputMap</code> was created for.
085 */
086 public JComponent getComponent() {
087 return component;
088 }
089
090 /**
091 * Adds a binding for <code>keyStroke</code> to <code>actionMapKey</code>.
092 * If <code>actionMapKey</code> is null, this removes the current binding
093 * for <code>keyStroke</code>.
094 */
095 public void put(KeyStroke keyStroke, Object actionMapKey) {
096 super .put(keyStroke, actionMapKey);
097 if (getComponent() != null) {
098 getComponent().componentInputMapChanged(this );
099 }
100 }
101
102 /**
103 * Removes the binding for <code>key</code> from this object.
104 */
105 public void remove(KeyStroke key) {
106 super .remove(key);
107 if (getComponent() != null) {
108 getComponent().componentInputMapChanged(this );
109 }
110 }
111
112 /**
113 * Removes all the mappings from this object.
114 */
115 public void clear() {
116 int oldSize = size();
117 super .clear();
118 if (oldSize > 0 && getComponent() != null) {
119 getComponent().componentInputMapChanged(this);
120 }
121 }
122 }
|