Showing the changes to java/pkg/java/awt/event (91 of 18352 files). Show all
Unified · Split
Binary file not shown.
| @@ -0,0 +1,62 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListener; | |
| 29 | +import java.awt.AWTEvent; | |
| 30 | + | |
| 31 | +/** | |
| 32 | + * The listener interface for receiving notification of events | |
| 33 | + * dispatched to objects that are instances of Component or | |
| 34 | + * MenuComponent or their subclasses. Unlike the other EventListeners | |
| 35 | + * in this package, AWTEventListeners passively observe events | |
| 36 | + * being dispatched in the AWT, system-wide. Most applications | |
| 37 | + * should never use this class; applications which might use | |
| 38 | + * AWTEventListeners include event recorders for automated testing, | |
| 39 | + * and facilities such as the Java Accessibility package. | |
| 40 | + * <p> | |
| 41 | + * The class that is interested in monitoring AWT events | |
| 42 | + * implements this interface, and the object created with that | |
| 43 | + * class is registered with the Toolkit, using the Toolkit's | |
| 44 | + * <code>addAWTEventListener</code> method. When an event is | |
| 45 | + * dispatched anywhere in the AWT, that object's | |
| 46 | + * <code>eventDispatched</code> method is invoked. | |
| 47 | + * | |
| 48 | + * @see java.awt.AWTEvent | |
| 49 | + * @see java.awt.Toolkit#addAWTEventListener | |
| 50 | + * @see java.awt.Toolkit#removeAWTEventListener | |
| 51 | + * | |
| 52 | + * @author Fred Ecks | |
| 53 | + * @since 1.2 | |
| 54 | + */ | |
| 55 | +public interface AWTEventListener extends EventListener { | |
| 56 | + | |
| 57 | + /** | |
| 58 | + * Invoked when an event is dispatched in the AWT. | |
| 59 | + */ | |
| 60 | + public void eventDispatched(AWTEvent event); | |
| 61 | + | |
| 62 | +} | |
Binary file not shown.
| @@ -0,0 +1,81 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 2001, 2007, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListenerProxy; | |
| 29 | +import java.awt.AWTEvent; | |
| 30 | + | |
| 31 | +/** | |
| 32 | + * A class which extends the {@code EventListenerProxy} | |
| 33 | + * specifically for adding an {@code AWTEventListener} | |
| 34 | + * for a specific event mask. | |
| 35 | + * Instances of this class can be added as {@code AWTEventListener}s | |
| 36 | + * to a {@code Toolkit} object. | |
| 37 | + * <p> | |
| 38 | + * The {@code getAWTEventListeners} method of {@code Toolkit} | |
| 39 | + * can return a mixture of {@code AWTEventListener} | |
| 40 | + * and {@code AWTEventListenerProxy} objects. | |
| 41 | + * | |
| 42 | + * @see java.awt.Toolkit | |
| 43 | + * @see java.util.EventListenerProxy | |
| 44 | + * @since 1.4 | |
| 45 | + */ | |
| 46 | +public class AWTEventListenerProxy | |
| 47 | + extends EventListenerProxy<AWTEventListener> | |
| 48 | + implements AWTEventListener { | |
| 49 | + | |
| 50 | + private final long eventMask; | |
| 51 | + | |
| 52 | + /** | |
| 53 | + * Constructor which binds the {@code AWTEventListener} | |
| 54 | + * to a specific event mask. | |
| 55 | + * | |
| 56 | + * @param eventMask the bitmap of event types to receive | |
| 57 | + * @param listener the listener object | |
| 58 | + */ | |
| 59 | + public AWTEventListenerProxy (long eventMask, AWTEventListener listener) { | |
| 60 | + super(listener); | |
| 61 | + this.eventMask = eventMask; | |
| 62 | + } | |
| 63 | + | |
| 64 | + /** | |
| 65 | + * Forwards the AWT event to the listener delegate. | |
| 66 | + * | |
| 67 | + * @param event the AWT event | |
| 68 | + */ | |
| 69 | + public void eventDispatched(AWTEvent event) { | |
| 70 | + getListener().eventDispatched(event); | |
| 71 | + } | |
| 72 | + | |
| 73 | + /** | |
| 74 | + * Returns the event mask associated with the listener. | |
| 75 | + * | |
| 76 | + * @return the event mask associated with the listener | |
| 77 | + */ | |
| 78 | + public long getEventMask() { | |
| 79 | + return this.eventMask; | |
| 80 | + } | |
| 81 | +} | |
Binary file not shown.
| @@ -0,0 +1,288 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.awt.AWTEvent; | |
| 29 | +import java.awt.Event; | |
| 30 | + | |
| 31 | +/** | |
| 32 | + * A semantic event which indicates that a component-defined action occurred. | |
| 33 | + * This high-level event is generated by a component (such as a | |
| 34 | + * <code>Button</code>) when | |
| 35 | + * the component-specific action occurs (such as being pressed). | |
| 36 | + * The event is passed to every <code>ActionListener</code> object | |
| 37 | + * that registered to receive such events using the component's | |
| 38 | + * <code>addActionListener</code> method. | |
| 39 | + * <p> | |
| 40 | + * <b>Note:</b> To invoke an <code>ActionEvent</code> on a | |
| 41 | + * <code>Button</code> using the keyboard, use the Space bar. | |
| 42 | + * <P> | |
| 43 | + * The object that implements the <code>ActionListener</code> interface | |
| 44 | + * gets this <code>ActionEvent</code> when the event occurs. The listener | |
| 45 | + * is therefore spared the details of processing individual mouse movements | |
| 46 | + * and mouse clicks, and can instead process a "meaningful" (semantic) | |
| 47 | + * event like "button pressed". | |
| 48 | + * <p> | |
| 49 | + * An unspecified behavior will be caused if the {@code id} parameter | |
| 50 | + * of any particular {@code ActionEvent} instance is not | |
| 51 | + * in the range from {@code ACTION_FIRST} to {@code ACTION_LAST}. | |
| 52 | + * | |
| 53 | + * @see ActionListener | |
| 54 | + * @see <a href="http://java.sun.com/docs/books/tutorial/uiswing/events/actionlistener.html">Tutorial: How to Write an Action Listener</a> | |
| 55 | + * | |
| 56 | + * @author Carl Quinn | |
| 57 | + * @since 1.1 | |
| 58 | + */ | |
| 59 | +public class ActionEvent extends AWTEvent { | |
| 60 | + | |
| 61 | + /** | |
| 62 | + * The shift modifier. An indicator that the shift key was held | |
| 63 | + * down during the event. | |
| 64 | + */ | |
| 65 | + public static final int SHIFT_MASK = Event.SHIFT_MASK; | |
| 66 | + | |
| 67 | + /** | |
| 68 | + * The control modifier. An indicator that the control key was held | |
| 69 | + * down during the event. | |
| 70 | + */ | |
| 71 | + public static final int CTRL_MASK = Event.CTRL_MASK; | |
| 72 | + | |
| 73 | + /** | |
| 74 | + * The meta modifier. An indicator that the meta key was held | |
| 75 | + * down during the event. | |
| 76 | + */ | |
| 77 | + public static final int META_MASK = Event.META_MASK; | |
| 78 | + | |
| 79 | + /** | |
| 80 | + * The alt modifier. An indicator that the alt key was held | |
| 81 | + * down during the event. | |
| 82 | + */ | |
| 83 | + public static final int ALT_MASK = Event.ALT_MASK; | |
| 84 | + | |
| 85 | + | |
| 86 | + /** | |
| 87 | + * The first number in the range of ids used for action events. | |
| 88 | + */ | |
| 89 | + public static final int ACTION_FIRST = 1001; | |
| 90 | + | |
| 91 | + /** | |
| 92 | + * The last number in the range of ids used for action events. | |
| 93 | + */ | |
| 94 | + public static final int ACTION_LAST = 1001; | |
| 95 | + | |
| 96 | + /** | |
| 97 | + * This event id indicates that a meaningful action occured. | |
| 98 | + */ | |
| 99 | + public static final int ACTION_PERFORMED = ACTION_FIRST; //Event.ACTION_EVENT | |
| 100 | + | |
| 101 | + /** | |
| 102 | + * The nonlocalized string that gives more details | |
| 103 | + * of what actually caused the event. | |
| 104 | + * This information is very specific to the component | |
| 105 | + * that fired it. | |
| 106 | + | |
| 107 | + * @serial | |
| 108 | + * @see #getActionCommand | |
| 109 | + */ | |
| 110 | + String actionCommand; | |
| 111 | + | |
| 112 | + /** | |
| 113 | + * Timestamp of when this event occurred. Because an ActionEvent is a high- | |
| 114 | + * level, semantic event, the timestamp is typically the same as an | |
| 115 | + * underlying InputEvent. | |
| 116 | + * | |
| 117 | + * @serial | |
| 118 | + * @see #getWhen | |
| 119 | + */ | |
| 120 | + long when; | |
| 121 | + | |
| 122 | + /** | |
| 123 | + * This represents the key modifier that was selected, | |
| 124 | + * and is used to determine the state of the selected key. | |
| 125 | + * If no modifier has been selected it will default to | |
| 126 | + * zero. | |
| 127 | + * | |
| 128 | + * @serial | |
| 129 | + * @see #getModifiers | |
| 130 | + */ | |
| 131 | + int modifiers; | |
| 132 | + | |
| 133 | + /* | |
| 134 | + * JDK 1.1 serialVersionUID | |
| 135 | + */ | |
| 136 | + private static final long serialVersionUID = -7671078796273832149L; | |
| 137 | + | |
| 138 | + /** | |
| 139 | + * Constructs an <code>ActionEvent</code> object. | |
| 140 | + * <p> | |
| 141 | + * This method throws an | |
| 142 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 143 | + * is <code>null</code>. | |
| 144 | + * A <code>null</code> <code>command</code> string is legal, | |
| 145 | + * but not recommended. | |
| 146 | + * | |
| 147 | + * @param source The object that originated the event | |
| 148 | + * @param id An integer that identifies the event. | |
| 149 | + * For information on allowable values, see | |
| 150 | + * the class description for {@link ActionEvent} | |
| 151 | + * @param command A string that may specify a command (possibly one | |
| 152 | + * of several) associated with the event | |
| 153 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 154 | + * @see #getSource() | |
| 155 | + * @see #getID() | |
| 156 | + * @see #getActionCommand() | |
| 157 | + */ | |
| 158 | + public ActionEvent(Object source, int id, String command) { | |
| 159 | + this(source, id, command, 0); | |
| 160 | + } | |
| 161 | + | |
| 162 | + /** | |
| 163 | + * Constructs an <code>ActionEvent</code> object with modifier keys. | |
| 164 | + * <p> | |
| 165 | + * This method throws an | |
| 166 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 167 | + * is <code>null</code>. | |
| 168 | + * A <code>null</code> <code>command</code> string is legal, | |
| 169 | + * but not recommended. | |
| 170 | + * | |
| 171 | + * @param source The object that originated the event | |
| 172 | + * @param id An integer that identifies the event. | |
| 173 | + * For information on allowable values, see | |
| 174 | + * the class description for {@link ActionEvent} | |
| 175 | + * @param command A string that may specify a command (possibly one | |
| 176 | + * of several) associated with the event | |
| 177 | + * @param modifiers The modifier keys down during event | |
| 178 | + * (shift, ctrl, alt, meta). | |
| 179 | + * Passing negative parameter is not recommended. | |
| 180 | + * Zero value means that no modifiers were passed | |
| 181 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 182 | + * @see #getSource() | |
| 183 | + * @see #getID() | |
| 184 | + * @see #getActionCommand() | |
| 185 | + * @see #getModifiers() | |
| 186 | + */ | |
| 187 | + public ActionEvent(Object source, int id, String command, int modifiers) { | |
| 188 | + this(source, id, command, 0, modifiers); | |
| 189 | + } | |
| 190 | + | |
| 191 | + /** | |
| 192 | + * Constructs an <code>ActionEvent</code> object with the specified | |
| 193 | + * modifier keys and timestamp. | |
| 194 | + * <p> | |
| 195 | + * This method throws an | |
| 196 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 197 | + * is <code>null</code>. | |
| 198 | + * A <code>null</code> <code>command</code> string is legal, | |
| 199 | + * but not recommended. | |
| 200 | + * | |
| 201 | + * @param source The object that originated the event | |
| 202 | + * @param id An integer that identifies the event. | |
| 203 | + * For information on allowable values, see | |
| 204 | + * the class description for {@link ActionEvent} | |
| 205 | + * @param command A string that may specify a command (possibly one | |
| 206 | + * of several) associated with the event | |
| 207 | + * @param modifiers The modifier keys down during event | |
| 208 | + * (shift, ctrl, alt, meta). | |
| 209 | + * Passing negative parameter is not recommended. | |
| 210 | + * Zero value means that no modifiers were passed | |
| 211 | + * @param when A long that gives the time the event occurred. | |
| 212 | + * Passing negative or zero value | |
| 213 | + * is not recommended | |
| 214 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 215 | + * @see #getSource() | |
| 216 | + * @see #getID() | |
| 217 | + * @see #getActionCommand() | |
| 218 | + * @see #getModifiers() | |
| 219 | + * @see #getWhen() | |
| 220 | + * | |
| 221 | + * @since 1.4 | |
| 222 | + */ | |
| 223 | + public ActionEvent(Object source, int id, String command, long when, | |
| 224 | + int modifiers) { | |
| 225 | + super(source, id); | |
| 226 | + this.actionCommand = command; | |
| 227 | + this.when = when; | |
| 228 | + this.modifiers = modifiers; | |
| 229 | + } | |
| 230 | + | |
| 231 | + /** | |
| 232 | + * Returns the command string associated with this action. | |
| 233 | + * This string allows a "modal" component to specify one of several | |
| 234 | + * commands, depending on its state. For example, a single button might | |
| 235 | + * toggle between "show details" and "hide details". The source object | |
| 236 | + * and the event would be the same in each case, but the command string | |
| 237 | + * would identify the intended action. | |
| 238 | + * <p> | |
| 239 | + * Note that if a <code>null</code> command string was passed | |
| 240 | + * to the constructor for this <code>ActionEvent</code>, this | |
| 241 | + * this method returns <code>null</code>. | |
| 242 | + * | |
| 243 | + * @return the string identifying the command for this event | |
| 244 | + */ | |
| 245 | + public String getActionCommand() { | |
| 246 | + return actionCommand; | |
| 247 | + } | |
| 248 | + | |
| 249 | + /** | |
| 250 | + * Returns the timestamp of when this event occurred. Because an | |
| 251 | + * ActionEvent is a high-level, semantic event, the timestamp is typically | |
| 252 | + * the same as an underlying InputEvent. | |
| 253 | + * | |
| 254 | + * @return this event's timestamp | |
| 255 | + * @since 1.4 | |
| 256 | + */ | |
| 257 | + public long getWhen() { | |
| 258 | + return when; | |
| 259 | + } | |
| 260 | + | |
| 261 | + /** | |
| 262 | + * Returns the modifier keys held down during this action event. | |
| 263 | + * | |
| 264 | + * @return the bitwise-or of the modifier constants | |
| 265 | + */ | |
| 266 | + public int getModifiers() { | |
| 267 | + return modifiers; | |
| 268 | + } | |
| 269 | + | |
| 270 | + /** | |
| 271 | + * Returns a parameter string identifying this action event. | |
| 272 | + * This method is useful for event-logging and for debugging. | |
| 273 | + * | |
| 274 | + * @return a string identifying the event and its associated command | |
| 275 | + */ | |
| 276 | + public String paramString() { | |
| 277 | + String typeStr; | |
| 278 | + switch(id) { | |
| 279 | + case ACTION_PERFORMED: | |
| 280 | + typeStr = "ACTION_PERFORMED"; | |
| 281 | + break; | |
| 282 | + default: | |
| 283 | + typeStr = "unknown type"; | |
| 284 | + } | |
| 285 | + return typeStr + ",cmd="+actionCommand+",when="+when+",modifiers="+ | |
| 286 | + KeyEvent.getKeyModifiersText(modifiers); | |
| 287 | + } | |
| 288 | +} | |
Binary file not shown.
| @@ -0,0 +1,52 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListener; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * The listener interface for receiving action events. | |
| 32 | + * The class that is interested in processing an action event | |
| 33 | + * implements this interface, and the object created with that | |
| 34 | + * class is registered with a component, using the component's | |
| 35 | + * <code>addActionListener</code> method. When the action event | |
| 36 | + * occurs, that object's <code>actionPerformed</code> method is | |
| 37 | + * invoked. | |
| 38 | + * | |
| 39 | + * @see ActionEvent | |
| 40 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/eventmodel.html">Tutorial: Java 1.1 Event Model</a> | |
| 41 | + * | |
| 42 | + * @author Carl Quinn | |
| 43 | + * @since 1.1 | |
| 44 | + */ | |
| 45 | +public interface ActionListener extends EventListener { | |
| 46 | + | |
| 47 | + /** | |
| 48 | + * Invoked when an action occurs. | |
| 49 | + */ | |
| 50 | + public void actionPerformed(ActionEvent e); | |
| 51 | + | |
| 52 | +} | |
Binary file not shown.
| @@ -0,0 +1,289 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.awt.Adjustable; | |
| 29 | +import java.awt.AWTEvent; | |
| 30 | + | |
| 31 | +/** | |
| 32 | + * The adjustment event emitted by Adjustable objects like | |
| 33 | + * {@link java.awt.Scrollbar} and {@link java.awt.ScrollPane}. | |
| 34 | + * When the user changes the value of the scrolling component, | |
| 35 | + * it receives an instance of {@code AdjustmentEvent}. | |
| 36 | + * <p> | |
| 37 | + * An unspecified behavior will be caused if the {@code id} parameter | |
| 38 | + * of any particular {@code AdjustmentEvent} instance is not | |
| 39 | + * in the range from {@code ADJUSTMENT_FIRST} to {@code ADJUSTMENT_LAST}. | |
| 40 | + * <p> | |
| 41 | + * The {@code type} of any {@code AdjustmentEvent} instance takes one of the following | |
| 42 | + * values: | |
| 43 | + * <ul> | |
| 44 | + * <li> {@code UNIT_INCREMENT} | |
| 45 | + * <li> {@code UNIT_DECREMENT} | |
| 46 | + * <li> {@code BLOCK_INCREMENT} | |
| 47 | + * <li> {@code BLOCK_DECREMENT} | |
| 48 | + * <li> {@code TRACK} | |
| 49 | + * </ul> | |
| 50 | + * Assigning the value different from listed above will cause an unspecified behavior. | |
| 51 | + * @see java.awt.Adjustable | |
| 52 | + * @see AdjustmentListener | |
| 53 | + * | |
| 54 | + * @author Amy Fowler | |
| 55 | + * @since 1.1 | |
| 56 | + */ | |
| 57 | +public class AdjustmentEvent extends AWTEvent { | |
| 58 | + | |
| 59 | + /** | |
| 60 | + * Marks the first integer id for the range of adjustment event ids. | |
| 61 | + */ | |
| 62 | + public static final int ADJUSTMENT_FIRST = 601; | |
| 63 | + | |
| 64 | + /** | |
| 65 | + * Marks the last integer id for the range of adjustment event ids. | |
| 66 | + */ | |
| 67 | + public static final int ADJUSTMENT_LAST = 601; | |
| 68 | + | |
| 69 | + /** | |
| 70 | + * The adjustment value changed event. | |
| 71 | + */ | |
| 72 | + public static final int ADJUSTMENT_VALUE_CHANGED = ADJUSTMENT_FIRST; //Event.SCROLL_LINE_UP | |
| 73 | + | |
| 74 | + /** | |
| 75 | + * The unit increment adjustment type. | |
| 76 | + */ | |
| 77 | + public static final int UNIT_INCREMENT = 1; | |
| 78 | + | |
| 79 | + /** | |
| 80 | + * The unit decrement adjustment type. | |
| 81 | + */ | |
| 82 | + public static final int UNIT_DECREMENT = 2; | |
| 83 | + | |
| 84 | + /** | |
| 85 | + * The block decrement adjustment type. | |
| 86 | + */ | |
| 87 | + public static final int BLOCK_DECREMENT = 3; | |
| 88 | + | |
| 89 | + /** | |
| 90 | + * The block increment adjustment type. | |
| 91 | + */ | |
| 92 | + public static final int BLOCK_INCREMENT = 4; | |
| 93 | + | |
| 94 | + /** | |
| 95 | + * The absolute tracking adjustment type. | |
| 96 | + */ | |
| 97 | + public static final int TRACK = 5; | |
| 98 | + | |
| 99 | + /** | |
| 100 | + * The adjustable object that fired the event. | |
| 101 | + * | |
| 102 | + * @serial | |
| 103 | + * @see #getAdjustable | |
| 104 | + */ | |
| 105 | + Adjustable adjustable; | |
| 106 | + | |
| 107 | + /** | |
| 108 | + * <code>value</code> will contain the new value of the | |
| 109 | + * adjustable object. This value will always be in a | |
| 110 | + * range associated adjustable object. | |
| 111 | + * | |
| 112 | + * @serial | |
| 113 | + * @see #getValue | |
| 114 | + */ | |
| 115 | + int value; | |
| 116 | + | |
| 117 | + /** | |
| 118 | + * The <code>adjustmentType</code> describes how the adjustable | |
| 119 | + * object value has changed. | |
| 120 | + * This value can be increased/decreased by a block or unit amount | |
| 121 | + * where the block is associated with page increments/decrements, | |
| 122 | + * and a unit is associated with line increments/decrements. | |
| 123 | + * | |
| 124 | + * @serial | |
| 125 | + * @see #getAdjustmentType | |
| 126 | + */ | |
| 127 | + int adjustmentType; | |
| 128 | + | |
| 129 | + | |
| 130 | + /** | |
| 131 | + * The <code>isAdjusting</code> is true if the event is one | |
| 132 | + * of the series of multiple adjustment events. | |
| 133 | + * | |
| 134 | + * @since 1.4 | |
| 135 | + * @serial | |
| 136 | + * @see #getValueIsAdjusting | |
| 137 | + */ | |
| 138 | + boolean isAdjusting; | |
| 139 | + | |
| 140 | + | |
| 141 | + /* | |
| 142 | + * JDK 1.1 serialVersionUID | |
| 143 | + */ | |
| 144 | + private static final long serialVersionUID = 5700290645205279921L; | |
| 145 | + | |
| 146 | + | |
| 147 | + /** | |
| 148 | + * Constructs an <code>AdjustmentEvent</code> object with the | |
| 149 | + * specified <code>Adjustable</code> source, event type, | |
| 150 | + * adjustment type, and value. | |
| 151 | + * <p> This method throws an | |
| 152 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 153 | + * is <code>null</code>. | |
| 154 | + * | |
| 155 | + * @param source The <code>Adjustable</code> object where the | |
| 156 | + * event originated | |
| 157 | + * @param id An integer indicating the type of event. | |
| 158 | + * For information on allowable values, see | |
| 159 | + * the class description for {@link AdjustmentEvent} | |
| 160 | + * @param type An integer indicating the adjustment type. | |
| 161 | + * For information on allowable values, see | |
| 162 | + * the class description for {@link AdjustmentEvent} | |
| 163 | + * @param value The current value of the adjustment | |
| 164 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 165 | + * @see #getSource() | |
| 166 | + * @see #getID() | |
| 167 | + * @see #getAdjustmentType() | |
| 168 | + * @see #getValue() | |
| 169 | + */ | |
| 170 | + public AdjustmentEvent(Adjustable source, int id, int type, int value) { | |
| 171 | + this(source, id, type, value, false); | |
| 172 | + } | |
| 173 | + | |
| 174 | + /** | |
| 175 | + * Constructs an <code>AdjustmentEvent</code> object with the | |
| 176 | + * specified Adjustable source, event type, adjustment type, and value. | |
| 177 | + * <p> This method throws an | |
| 178 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 179 | + * is <code>null</code>. | |
| 180 | + * | |
| 181 | + * @param source The <code>Adjustable</code> object where the | |
| 182 | + * event originated | |
| 183 | + * @param id An integer indicating the type of event. | |
| 184 | + * For information on allowable values, see | |
| 185 | + * the class description for {@link AdjustmentEvent} | |
| 186 | + * @param type An integer indicating the adjustment type. | |
| 187 | + * For information on allowable values, see | |
| 188 | + * the class description for {@link AdjustmentEvent} | |
| 189 | + * @param value The current value of the adjustment | |
| 190 | + * @param isAdjusting A boolean that equals <code>true</code> if the event is one | |
| 191 | + * of a series of multiple adjusting events, | |
| 192 | + * otherwise <code>false</code> | |
| 193 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 194 | + * @since 1.4 | |
| 195 | + * @see #getSource() | |
| 196 | + * @see #getID() | |
| 197 | + * @see #getAdjustmentType() | |
| 198 | + * @see #getValue() | |
| 199 | + * @see #getValueIsAdjusting() | |
| 200 | + */ | |
| 201 | + public AdjustmentEvent(Adjustable source, int id, int type, int value, boolean isAdjusting) { | |
| 202 | + super(source, id); | |
| 203 | + adjustable = source; | |
| 204 | + this.adjustmentType = type; | |
| 205 | + this.value = value; | |
| 206 | + this.isAdjusting = isAdjusting; | |
| 207 | + } | |
| 208 | + | |
| 209 | + /** | |
| 210 | + * Returns the <code>Adjustable</code> object where this event originated. | |
| 211 | + * | |
| 212 | + * @return the <code>Adjustable</code> object where this event originated | |
| 213 | + */ | |
| 214 | + public Adjustable getAdjustable() { | |
| 215 | + return adjustable; | |
| 216 | + } | |
| 217 | + | |
| 218 | + /** | |
| 219 | + * Returns the current value in the adjustment event. | |
| 220 | + * | |
| 221 | + * @return the current value in the adjustment event | |
| 222 | + */ | |
| 223 | + public int getValue() { | |
| 224 | + return value; | |
| 225 | + } | |
| 226 | + | |
| 227 | + /** | |
| 228 | + * Returns the type of adjustment which caused the value changed | |
| 229 | + * event. It will have one of the following values: | |
| 230 | + * <ul> | |
| 231 | + * <li>{@link #UNIT_INCREMENT} | |
| 232 | + * <li>{@link #UNIT_DECREMENT} | |
| 233 | + * <li>{@link #BLOCK_INCREMENT} | |
| 234 | + * <li>{@link #BLOCK_DECREMENT} | |
| 235 | + * <li>{@link #TRACK} | |
| 236 | + * </ul> | |
| 237 | + * @return one of the adjustment values listed above | |
| 238 | + */ | |
| 239 | + public int getAdjustmentType() { | |
| 240 | + return adjustmentType; | |
| 241 | + } | |
| 242 | + | |
| 243 | + /** | |
| 244 | + * Returns <code>true</code> if this is one of multiple | |
| 245 | + * adjustment events. | |
| 246 | + * | |
| 247 | + * @return <code>true</code> if this is one of multiple | |
| 248 | + * adjustment events, otherwise returns <code>false</code> | |
| 249 | + * @since 1.4 | |
| 250 | + */ | |
| 251 | + public boolean getValueIsAdjusting() { | |
| 252 | + return isAdjusting; | |
| 253 | + } | |
| 254 | + | |
| 255 | + public String paramString() { | |
| 256 | + String typeStr; | |
| 257 | + switch(id) { | |
| 258 | + case ADJUSTMENT_VALUE_CHANGED: | |
| 259 | + typeStr = "ADJUSTMENT_VALUE_CHANGED"; | |
| 260 | + break; | |
| 261 | + default: | |
| 262 | + typeStr = "unknown type"; | |
| 263 | + } | |
| 264 | + String adjTypeStr; | |
| 265 | + switch(adjustmentType) { | |
| 266 | + case UNIT_INCREMENT: | |
| 267 | + adjTypeStr = "UNIT_INCREMENT"; | |
| 268 | + break; | |
| 269 | + case UNIT_DECREMENT: | |
| 270 | + adjTypeStr = "UNIT_DECREMENT"; | |
| 271 | + break; | |
| 272 | + case BLOCK_INCREMENT: | |
| 273 | + adjTypeStr = "BLOCK_INCREMENT"; | |
| 274 | + break; | |
| 275 | + case BLOCK_DECREMENT: | |
| 276 | + adjTypeStr = "BLOCK_DECREMENT"; | |
| 277 | + break; | |
| 278 | + case TRACK: | |
| 279 | + adjTypeStr = "TRACK"; | |
| 280 | + break; | |
| 281 | + default: | |
| 282 | + adjTypeStr = "unknown type"; | |
| 283 | + } | |
| 284 | + return typeStr | |
| 285 | + + ",adjType="+adjTypeStr | |
| 286 | + + ",value="+value | |
| 287 | + + ",isAdjusting="+isAdjusting; | |
| 288 | + } | |
| 289 | +} | |
Binary file not shown.
| @@ -0,0 +1,43 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 1999, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListener; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * The listener interface for receiving adjustment events. | |
| 32 | + * | |
| 33 | + * @author Amy Fowler | |
| 34 | + * @since 1.1 | |
| 35 | + */ | |
| 36 | +public interface AdjustmentListener extends EventListener { | |
| 37 | + | |
| 38 | + /** | |
| 39 | + * Invoked when the value of the adjustable has changed. | |
| 40 | + */ | |
| 41 | + public void adjustmentValueChanged(AdjustmentEvent e); | |
| 42 | + | |
| 43 | +} | |
Binary file not shown.
| @@ -0,0 +1,72 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +/** | |
| 29 | + * An abstract adapter class for receiving component events. | |
| 30 | + * The methods in this class are empty. This class exists as | |
| 31 | + * convenience for creating listener objects. | |
| 32 | + * <P> | |
| 33 | + * Extend this class to create a <code>ComponentEvent</code> listener | |
| 34 | + * and override the methods for the events of interest. (If you implement the | |
| 35 | + * <code>ComponentListener</code> interface, you have to define all of | |
| 36 | + * the methods in it. This abstract class defines null methods for them | |
| 37 | + * all, so you can only have to define methods for events you care about.) | |
| 38 | + * <P> | |
| 39 | + * Create a listener object using your class and then register it with a | |
| 40 | + * component using the component's <code>addComponentListener</code> | |
| 41 | + * method. When the component's size, location, or visibility | |
| 42 | + * changes, the relevant method in the listener object is invoked, | |
| 43 | + * and the <code>ComponentEvent</code> is passed to it. | |
| 44 | + * | |
| 45 | + * @see ComponentEvent | |
| 46 | + * @see ComponentListener | |
| 47 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/componentlistener.html">Tutorial: Writing a Component Listener</a> | |
| 48 | + * | |
| 49 | + * @author Carl Quinn | |
| 50 | + * @since 1.1 | |
| 51 | + */ | |
| 52 | +public abstract class ComponentAdapter implements ComponentListener { | |
| 53 | + /** | |
| 54 | + * Invoked when the component's size changes. | |
| 55 | + */ | |
| 56 | + public void componentResized(ComponentEvent e) {} | |
| 57 | + | |
| 58 | + /** | |
| 59 | + * Invoked when the component's position changes. | |
| 60 | + */ | |
| 61 | + public void componentMoved(ComponentEvent e) {} | |
| 62 | + | |
| 63 | + /** | |
| 64 | + * Invoked when the component has been made visible. | |
| 65 | + */ | |
| 66 | + public void componentShown(ComponentEvent e) {} | |
| 67 | + | |
| 68 | + /** | |
| 69 | + * Invoked when the component has been made invisible. | |
| 70 | + */ | |
| 71 | + public void componentHidden(ComponentEvent e) {} | |
| 72 | +} | |
Binary file not shown.
| @@ -0,0 +1,165 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.awt.AWTEvent; | |
| 29 | +import java.awt.Component; | |
| 30 | +import java.awt.Rectangle; | |
| 31 | + | |
| 32 | +/** | |
| 33 | + * A low-level event which indicates that a component moved, changed | |
| 34 | + * size, or changed visibility (also, the root class for the other | |
| 35 | + * component-level events). | |
| 36 | + * <P> | |
| 37 | + * Component events are provided for notification purposes ONLY; | |
| 38 | + * The AWT will automatically handle component moves and resizes | |
| 39 | + * internally so that GUI layout works properly regardless of | |
| 40 | + * whether a program is receiving these events or not. | |
| 41 | + * <P> | |
| 42 | + * In addition to serving as the base class for other component-related | |
| 43 | + * events (InputEvent, FocusEvent, WindowEvent, ContainerEvent), | |
| 44 | + * this class defines the events that indicate changes in | |
| 45 | + * a component's size, position, or visibility. | |
| 46 | + * <P> | |
| 47 | + * This low-level event is generated by a component object (such as a | |
| 48 | + * List) when the component is moved, resized, rendered invisible, or made | |
| 49 | + * visible again. The event is passed to every <code>ComponentListener</code> | |
| 50 | + * or <code>ComponentAdapter</code> object which registered to receive such | |
| 51 | + * events using the component's <code>addComponentListener</code> method. | |
| 52 | + * (<code>ComponentAdapter</code> objects implement the | |
| 53 | + * <code>ComponentListener</code> interface.) Each such listener object | |
| 54 | + * gets this <code>ComponentEvent</code> when the event occurs. | |
| 55 | + * <p> | |
| 56 | + * An unspecified behavior will be caused if the {@code id} parameter | |
| 57 | + * of any particular {@code ComponentEvent} instance is not | |
| 58 | + * in the range from {@code COMPONENT_FIRST} to {@code COMPONENT_LAST}. | |
| 59 | + * | |
| 60 | + * @see ComponentAdapter | |
| 61 | + * @see ComponentListener | |
| 62 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/componentlistener.html">Tutorial: Writing a Component Listener</a> | |
| 63 | + * | |
| 64 | + * @author Carl Quinn | |
| 65 | + * @since 1.1 | |
| 66 | + */ | |
| 67 | +public class ComponentEvent extends AWTEvent { | |
| 68 | + | |
| 69 | + /** | |
| 70 | + * The first number in the range of ids used for component events. | |
| 71 | + */ | |
| 72 | + public static final int COMPONENT_FIRST = 100; | |
| 73 | + | |
| 74 | + /** | |
| 75 | + * The last number in the range of ids used for component events. | |
| 76 | + */ | |
| 77 | + public static final int COMPONENT_LAST = 103; | |
| 78 | + | |
| 79 | + /** | |
| 80 | + * This event indicates that the component's position changed. | |
| 81 | + */ | |
| 82 | + public static final int COMPONENT_MOVED = COMPONENT_FIRST; | |
| 83 | + | |
| 84 | + /** | |
| 85 | + * This event indicates that the component's size changed. | |
| 86 | + */ | |
| 87 | + public static final int COMPONENT_RESIZED = 1 + COMPONENT_FIRST; | |
| 88 | + | |
| 89 | + /** | |
| 90 | + * This event indicates that the component was made visible. | |
| 91 | + */ | |
| 92 | + public static final int COMPONENT_SHOWN = 2 + COMPONENT_FIRST; | |
| 93 | + | |
| 94 | + /** | |
| 95 | + * This event indicates that the component was rendered invisible. | |
| 96 | + */ | |
| 97 | + public static final int COMPONENT_HIDDEN = 3 + COMPONENT_FIRST; | |
| 98 | + | |
| 99 | + /* | |
| 100 | + * JDK 1.1 serialVersionUID | |
| 101 | + */ | |
| 102 | + private static final long serialVersionUID = 8101406823902992965L; | |
| 103 | + | |
| 104 | + /** | |
| 105 | + * Constructs a <code>ComponentEvent</code> object. | |
| 106 | + * <p> This method throws an | |
| 107 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 108 | + * is <code>null</code>. | |
| 109 | + * | |
| 110 | + * @param source The <code>Component</code> that originated the event | |
| 111 | + * @param id An integer indicating the type of event. | |
| 112 | + * For information on allowable values, see | |
| 113 | + * the class description for {@link ComponentEvent} | |
| 114 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 115 | + * @see #getComponent() | |
| 116 | + * @see #getID() | |
| 117 | + */ | |
| 118 | + public ComponentEvent(Component source, int id) { | |
| 119 | + super(source, id); | |
| 120 | + } | |
| 121 | + | |
| 122 | + /** | |
| 123 | + * Returns the originator of the event. | |
| 124 | + * | |
| 125 | + * @return the <code>Component</code> object that originated | |
| 126 | + * the event, or <code>null</code> if the object is not a | |
| 127 | + * <code>Component</code>. | |
| 128 | + */ | |
| 129 | + public Component getComponent() { | |
| 130 | + return (source instanceof Component) ? (Component)source : null; | |
| 131 | + } | |
| 132 | + | |
| 133 | + /** | |
| 134 | + * Returns a parameter string identifying this event. | |
| 135 | + * This method is useful for event-logging and for debugging. | |
| 136 | + * | |
| 137 | + * @return a string identifying the event and its attributes | |
| 138 | + */ | |
| 139 | + public String paramString() { | |
| 140 | + String typeStr; | |
| 141 | + Rectangle b = (source !=null | |
| 142 | + ? ((Component)source).getBounds() | |
| 143 | + : null); | |
| 144 | + | |
| 145 | + switch(id) { | |
| 146 | + case COMPONENT_SHOWN: | |
| 147 | + typeStr = "COMPONENT_SHOWN"; | |
| 148 | + break; | |
| 149 | + case COMPONENT_HIDDEN: | |
| 150 | + typeStr = "COMPONENT_HIDDEN"; | |
| 151 | + break; | |
| 152 | + case COMPONENT_MOVED: | |
| 153 | + typeStr = "COMPONENT_MOVED ("+ | |
| 154 | + b.x+","+b.y+" "+b.width+"x"+b.height+")"; | |
| 155 | + break; | |
| 156 | + case COMPONENT_RESIZED: | |
| 157 | + typeStr = "COMPONENT_RESIZED ("+ | |
| 158 | + b.x+","+b.y+" "+b.width+"x"+b.height+")"; | |
| 159 | + break; | |
| 160 | + default: | |
| 161 | + typeStr = "unknown type"; | |
| 162 | + } | |
| 163 | + return typeStr; | |
| 164 | + } | |
| 165 | +} | |
Binary file not shown.
| @@ -0,0 +1,74 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListener; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * The listener interface for receiving component events. | |
| 32 | + * The class that is interested in processing a component event | |
| 33 | + * either implements this interface (and all the methods it | |
| 34 | + * contains) or extends the abstract <code>ComponentAdapter</code> class | |
| 35 | + * (overriding only the methods of interest). | |
| 36 | + * The listener object created from that class is then registered with a | |
| 37 | + * component using the component's <code>addComponentListener</code> | |
| 38 | + * method. When the component's size, location, or visibility | |
| 39 | + * changes, the relevant method in the listener object is invoked, | |
| 40 | + * and the <code>ComponentEvent</code> is passed to it. | |
| 41 | + * <P> | |
| 42 | + * Component events are provided for notification purposes ONLY; | |
| 43 | + * The AWT will automatically handle component moves and resizes | |
| 44 | + * internally so that GUI layout works properly regardless of | |
| 45 | + * whether a program registers a <code>ComponentListener</code> or not. | |
| 46 | + * | |
| 47 | + * @see ComponentAdapter | |
| 48 | + * @see ComponentEvent | |
| 49 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/componentlistener.html">Tutorial: Writing a Component Listener</a> | |
| 50 | + * | |
| 51 | + * @author Carl Quinn | |
| 52 | + * @since 1.1 | |
| 53 | + */ | |
| 54 | +public interface ComponentListener extends EventListener { | |
| 55 | + /** | |
| 56 | + * Invoked when the component's size changes. | |
| 57 | + */ | |
| 58 | + public void componentResized(ComponentEvent e); | |
| 59 | + | |
| 60 | + /** | |
| 61 | + * Invoked when the component's position changes. | |
| 62 | + */ | |
| 63 | + public void componentMoved(ComponentEvent e); | |
| 64 | + | |
| 65 | + /** | |
| 66 | + * Invoked when the component has been made visible. | |
| 67 | + */ | |
| 68 | + public void componentShown(ComponentEvent e); | |
| 69 | + | |
| 70 | + /** | |
| 71 | + * Invoked when the component has been made invisible. | |
| 72 | + */ | |
| 73 | + public void componentHidden(ComponentEvent e); | |
| 74 | +} | |
Binary file not shown.
| @@ -0,0 +1,62 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +/** | |
| 29 | + * An abstract adapter class for receiving container events. | |
| 30 | + * The methods in this class are empty. This class exists as | |
| 31 | + * convenience for creating listener objects. | |
| 32 | + * <P> | |
| 33 | + * Extend this class to create a <code>ContainerEvent</code> listener | |
| 34 | + * and override the methods for the events of interest. (If you implement the | |
| 35 | + * <code>ContainerListener</code> interface, you have to define all of | |
| 36 | + * the methods in it. This abstract class defines null methods for them | |
| 37 | + * all, so you can only have to define methods for events you care about.) | |
| 38 | + * <P> | |
| 39 | + * Create a listener object using the extended class and then register it with | |
| 40 | + * a component using the component's <code>addContainerListener</code> | |
| 41 | + * method. When the container's contents change because a component has | |
| 42 | + * been added or removed, the relevant method in the listener object is invoked, | |
| 43 | + * and the <code>ContainerEvent</code> is passed to it. | |
| 44 | + * | |
| 45 | + * @see ContainerEvent | |
| 46 | + * @see ContainerListener | |
| 47 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/containerlistener.html">Tutorial: Writing a Container Listener</a> | |
| 48 | + * | |
| 49 | + * @author Amy Fowler | |
| 50 | + * @since 1.1 | |
| 51 | + */ | |
| 52 | +public abstract class ContainerAdapter implements ContainerListener { | |
| 53 | + /** | |
| 54 | + * Invoked when a component has been added to the container. | |
| 55 | + */ | |
| 56 | + public void componentAdded(ContainerEvent e) {} | |
| 57 | + | |
| 58 | + /** | |
| 59 | + * Invoked when a component has been removed from the container. | |
| 60 | + */ | |
| 61 | + public void componentRemoved(ContainerEvent e) {} | |
| 62 | +} | |
Binary file not shown.
| @@ -0,0 +1,159 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.awt.Container; | |
| 29 | +import java.awt.Component; | |
| 30 | + | |
| 31 | +/** | |
| 32 | + * A low-level event which indicates that a container's contents | |
| 33 | + * changed because a component was added or removed. | |
| 34 | + * <P> | |
| 35 | + * Container events are provided for notification purposes ONLY; | |
| 36 | + * The AWT will automatically handle changes to the containers | |
| 37 | + * contents internally so that the program works properly regardless of | |
| 38 | + * whether the program is receiving these events or not. | |
| 39 | + * <P> | |
| 40 | + * This low-level event is generated by a container object (such as a | |
| 41 | + * Panel) when a component is added to it or removed from it. | |
| 42 | + * The event is passed to every <code>ContainerListener</code> | |
| 43 | + * or <code>ContainerAdapter</code> object which registered to receive such | |
| 44 | + * events using the component's <code>addContainerListener</code> method. | |
| 45 | + * (<code>ContainerAdapter</code> objects implement the | |
| 46 | + * <code>ContainerListener</code> interface.) Each such listener object | |
| 47 | + * gets this <code>ContainerEvent</code> when the event occurs. | |
| 48 | + * <p> | |
| 49 | + * An unspecified behavior will be caused if the {@code id} parameter | |
| 50 | + * of any particular {@code ContainerEvent} instance is not | |
| 51 | + * in the range from {@code CONTAINER_FIRST} to {@code CONTAINER_LAST}. | |
| 52 | + * | |
| 53 | + * @see ContainerAdapter | |
| 54 | + * @see ContainerListener | |
| 55 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/containerlistener.html">Tutorial: Writing a Container Listener</a> | |
| 56 | + * | |
| 57 | + * @author Tim Prinzing | |
| 58 | + * @author Amy Fowler | |
| 59 | + * @since 1.1 | |
| 60 | + */ | |
| 61 | +public class ContainerEvent extends ComponentEvent { | |
| 62 | + | |
| 63 | + /** | |
| 64 | + * The first number in the range of ids used for container events. | |
| 65 | + */ | |
| 66 | + public static final int CONTAINER_FIRST = 300; | |
| 67 | + | |
| 68 | + /** | |
| 69 | + * The last number in the range of ids used for container events. | |
| 70 | + */ | |
| 71 | + public static final int CONTAINER_LAST = 301; | |
| 72 | + | |
| 73 | + /** | |
| 74 | + * This event indicates that a component was added to the container. | |
| 75 | + */ | |
| 76 | + public static final int COMPONENT_ADDED = CONTAINER_FIRST; | |
| 77 | + | |
| 78 | + /** | |
| 79 | + * This event indicates that a component was removed from the container. | |
| 80 | + */ | |
| 81 | + public static final int COMPONENT_REMOVED = 1 + CONTAINER_FIRST; | |
| 82 | + | |
| 83 | + /** | |
| 84 | + * The non-null component that is being added or | |
| 85 | + * removed from the Container. | |
| 86 | + * | |
| 87 | + * @serial | |
| 88 | + * @see #getChild() | |
| 89 | + */ | |
| 90 | + Component child; | |
| 91 | + | |
| 92 | + /* | |
| 93 | + * JDK 1.1 serialVersionUID | |
| 94 | + */ | |
| 95 | + private static final long serialVersionUID = -4114942250539772041L; | |
| 96 | + | |
| 97 | + /** | |
| 98 | + * Constructs a <code>ContainerEvent</code> object. | |
| 99 | + * <p> This method throws an | |
| 100 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 101 | + * is <code>null</code>. | |
| 102 | + * | |
| 103 | + * @param source The <code>Component</code> object (container) | |
| 104 | + * that originated the event | |
| 105 | + * @param id An integer indicating the type of event. | |
| 106 | + * For information on allowable values, see | |
| 107 | + * the class description for {@link ContainerEvent} | |
| 108 | + * @param child the component that was added or removed | |
| 109 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 110 | + * @see #getContainer() | |
| 111 | + * @see #getID() | |
| 112 | + * @see #getChild() | |
| 113 | + */ | |
| 114 | + public ContainerEvent(Component source, int id, Component child) { | |
| 115 | + super(source, id); | |
| 116 | + this.child = child; | |
| 117 | + } | |
| 118 | + | |
| 119 | + /** | |
| 120 | + * Returns the originator of the event. | |
| 121 | + * | |
| 122 | + * @return the <code>Container</code> object that originated | |
| 123 | + * the event, or <code>null</code> if the object is not a | |
| 124 | + * <code>Container</code>. | |
| 125 | + */ | |
| 126 | + public Container getContainer() { | |
| 127 | + return (source instanceof Container) ? (Container)source : null; | |
| 128 | + } | |
| 129 | + | |
| 130 | + /** | |
| 131 | + * Returns the component that was affected by the event. | |
| 132 | + * | |
| 133 | + * @return the Component object that was added or removed | |
| 134 | + */ | |
| 135 | + public Component getChild() { | |
| 136 | + return child; | |
| 137 | + } | |
| 138 | + | |
| 139 | + /** | |
| 140 | + * Returns a parameter string identifying this event. | |
| 141 | + * This method is useful for event-logging and for debugging. | |
| 142 | + * | |
| 143 | + * @return a string identifying the event and its attributes | |
| 144 | + */ | |
| 145 | + public String paramString() { | |
| 146 | + String typeStr; | |
| 147 | + switch(id) { | |
| 148 | + case COMPONENT_ADDED: | |
| 149 | + typeStr = "COMPONENT_ADDED"; | |
| 150 | + break; | |
| 151 | + case COMPONENT_REMOVED: | |
| 152 | + typeStr = "COMPONENT_REMOVED"; | |
| 153 | + break; | |
| 154 | + default: | |
| 155 | + typeStr = "unknown type"; | |
| 156 | + } | |
| 157 | + return typeStr + ",child="+child.getName(); | |
| 158 | + } | |
| 159 | +} | |
Binary file not shown.
| @@ -0,0 +1,66 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListener; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * The listener interface for receiving container events. | |
| 32 | + * The class that is interested in processing a container event | |
| 33 | + * either implements this interface (and all the methods it | |
| 34 | + * contains) or extends the abstract <code>ContainerAdapter</code> class | |
| 35 | + * (overriding only the methods of interest). | |
| 36 | + * The listener object created from that class is then registered with a | |
| 37 | + * component using the component's <code>addContainerListener</code> | |
| 38 | + * method. When the container's contents change because a component | |
| 39 | + * has been added or removed, the relevant method in the listener object | |
| 40 | + * is invoked, and the <code>ContainerEvent</code> is passed to it. | |
| 41 | + * <P> | |
| 42 | + * Container events are provided for notification purposes ONLY; | |
| 43 | + * The AWT will automatically handle add and remove operations | |
| 44 | + * internally so the program works properly regardless of | |
| 45 | + * whether the program registers a <code>ComponentListener</code> or not. | |
| 46 | + * | |
| 47 | + * @see ContainerAdapter | |
| 48 | + * @see ContainerEvent | |
| 49 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/containerlistener.html">Tutorial: Writing a Container Listener</a> | |
| 50 | + * | |
| 51 | + * @author Tim Prinzing | |
| 52 | + * @author Amy Fowler | |
| 53 | + * @since 1.1 | |
| 54 | + */ | |
| 55 | +public interface ContainerListener extends EventListener { | |
| 56 | + /** | |
| 57 | + * Invoked when a component has been added to the container. | |
| 58 | + */ | |
| 59 | + public void componentAdded(ContainerEvent e); | |
| 60 | + | |
| 61 | + /** | |
| 62 | + * Invoked when a component has been removed from the container. | |
| 63 | + */ | |
| 64 | + public void componentRemoved(ContainerEvent e); | |
| 65 | + | |
| 66 | +} | |
Binary file not shown.
| @@ -0,0 +1,62 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +/** | |
| 29 | + * An abstract adapter class for receiving keyboard focus events. | |
| 30 | + * The methods in this class are empty. This class exists as | |
| 31 | + * convenience for creating listener objects. | |
| 32 | + * <P> | |
| 33 | + * Extend this class to create a <code>FocusEvent</code> listener | |
| 34 | + * and override the methods for the events of interest. (If you implement the | |
| 35 | + * <code>FocusListener</code> interface, you have to define all of | |
| 36 | + * the methods in it. This abstract class defines null methods for them | |
| 37 | + * all, so you can only have to define methods for events you care about.) | |
| 38 | + * <P> | |
| 39 | + * Create a listener object using the extended class and then register it with | |
| 40 | + * a component using the component's <code>addFocusListener</code> | |
| 41 | + * method. When the component gains or loses the keyboard focus, | |
| 42 | + * the relevant method in the listener object is invoked, | |
| 43 | + * and the <code>FocusEvent</code> is passed to it. | |
| 44 | + * | |
| 45 | + * @see FocusEvent | |
| 46 | + * @see FocusListener | |
| 47 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/focuslistener.html">Tutorial: Writing a Focus Listener</a> | |
| 48 | + * | |
| 49 | + * @author Carl Quinn | |
| 50 | + * @since 1.1 | |
| 51 | + */ | |
| 52 | +public abstract class FocusAdapter implements FocusListener { | |
| 53 | + /** | |
| 54 | + * Invoked when a component gains the keyboard focus. | |
| 55 | + */ | |
| 56 | + public void focusGained(FocusEvent e) {} | |
| 57 | + | |
| 58 | + /** | |
| 59 | + * Invoked when a component loses the keyboard focus. | |
| 60 | + */ | |
| 61 | + public void focusLost(FocusEvent e) {} | |
| 62 | +} | |
Binary file not shown.
| @@ -0,0 +1,249 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.awt.Component; | |
| 29 | +import sun.awt.AppContext; | |
| 30 | +import sun.awt.SunToolkit; | |
| 31 | + | |
| 32 | +/** | |
| 33 | + * A low-level event which indicates that a Component has gained or lost the | |
| 34 | + * input focus. This low-level event is generated by a Component (such as a | |
| 35 | + * TextField). The event is passed to every <code>FocusListener</code> or | |
| 36 | + * <code>FocusAdapter</code> object which registered to receive such events | |
| 37 | + * using the Component's <code>addFocusListener</code> method. (<code> | |
| 38 | + * FocusAdapter</code> objects implement the <code>FocusListener</code> | |
| 39 | + * interface.) Each such listener object gets this <code>FocusEvent</code> when | |
| 40 | + * the event occurs. | |
| 41 | + * <p> | |
| 42 | + * There are two levels of focus events: permanent and temporary. Permanent | |
| 43 | + * focus change events occur when focus is directly moved from one Component to | |
| 44 | + * another, such as through a call to requestFocus() or as the user uses the | |
| 45 | + * TAB key to traverse Components. Temporary focus change events occur when | |
| 46 | + * focus is temporarily lost for a Component as the indirect result of another | |
| 47 | + * operation, such as Window deactivation or a Scrollbar drag. In this case, | |
| 48 | + * the original focus state will automatically be restored once that operation | |
| 49 | + * is finished, or, for the case of Window deactivation, when the Window is | |
| 50 | + * reactivated. Both permanent and temporary focus events are delivered using | |
| 51 | + * the FOCUS_GAINED and FOCUS_LOST event ids; the level may be distinguished in | |
| 52 | + * the event using the isTemporary() method. | |
| 53 | + * <p> | |
| 54 | + * An unspecified behavior will be caused if the {@code id} parameter | |
| 55 | + * of any particular {@code FocusEvent} instance is not | |
| 56 | + * in the range from {@code FOCUS_FIRST} to {@code FOCUS_LAST}. | |
| 57 | + * | |
| 58 | + * @see FocusAdapter | |
| 59 | + * @see FocusListener | |
| 60 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/focuslistener.html">Tutorial: Writing a Focus Listener</a> | |
| 61 | + * | |
| 62 | + * @author Carl Quinn | |
| 63 | + * @author Amy Fowler | |
| 64 | + * @since 1.1 | |
| 65 | + */ | |
| 66 | +public class FocusEvent extends ComponentEvent { | |
| 67 | + | |
| 68 | + /** | |
| 69 | + * The first number in the range of ids used for focus events. | |
| 70 | + */ | |
| 71 | + public static final int FOCUS_FIRST = 1004; | |
| 72 | + | |
| 73 | + /** | |
| 74 | + * The last number in the range of ids used for focus events. | |
| 75 | + */ | |
| 76 | + public static final int FOCUS_LAST = 1005; | |
| 77 | + | |
| 78 | + /** | |
| 79 | + * This event indicates that the Component is now the focus owner. | |
| 80 | + */ | |
| 81 | + public static final int FOCUS_GAINED = FOCUS_FIRST; //Event.GOT_FOCUS | |
| 82 | + | |
| 83 | + /** | |
| 84 | + * This event indicates that the Component is no longer the focus owner. | |
| 85 | + */ | |
| 86 | + public static final int FOCUS_LOST = 1 + FOCUS_FIRST; //Event.LOST_FOCUS | |
| 87 | + | |
| 88 | + /** | |
| 89 | + * A focus event can have two different levels, permanent and temporary. | |
| 90 | + * It will be set to true if some operation takes away the focus | |
| 91 | + * temporarily and intends on getting it back once the event is completed. | |
| 92 | + * Otherwise it will be set to false. | |
| 93 | + * | |
| 94 | + * @serial | |
| 95 | + * @see #isTemporary | |
| 96 | + */ | |
| 97 | + boolean temporary; | |
| 98 | + | |
| 99 | + /** | |
| 100 | + * The other Component involved in this focus change. For a FOCUS_GAINED | |
| 101 | + * event, this is the Component that lost focus. For a FOCUS_LOST event, | |
| 102 | + * this is the Component that gained focus. If this focus change occurs | |
| 103 | + * with a native application, a Java application in a different VM, or with | |
| 104 | + * no other Component, then the opposite Component is null. | |
| 105 | + * | |
| 106 | + * @see #getOppositeComponent | |
| 107 | + * @since 1.4 | |
| 108 | + */ | |
| 109 | + transient Component opposite; | |
| 110 | + | |
| 111 | + /* | |
| 112 | + * JDK 1.1 serialVersionUID | |
| 113 | + */ | |
| 114 | + private static final long serialVersionUID = 523753786457416396L; | |
| 115 | + | |
| 116 | + /** | |
| 117 | + * Constructs a <code>FocusEvent</code> object with the | |
| 118 | + * specified temporary state and opposite <code>Component</code>. | |
| 119 | + * The opposite <code>Component</code> is the other | |
| 120 | + * <code>Component</code> involved in this focus change. | |
| 121 | + * For a <code>FOCUS_GAINED</code> event, this is the | |
| 122 | + * <code>Component</code> that lost focus. For a | |
| 123 | + * <code>FOCUS_LOST</code> event, this is the <code>Component</code> | |
| 124 | + * that gained focus. If this focus change occurs with a native | |
| 125 | + * application, with a Java application in a different VM, | |
| 126 | + * or with no other <code>Component</code>, then the opposite | |
| 127 | + * <code>Component</code> is <code>null</code>. | |
| 128 | + * <p> This method throws an | |
| 129 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 130 | + * is <code>null</code>. | |
| 131 | + * | |
| 132 | + * @param source The <code>Component</code> that originated the event | |
| 133 | + * @param id An integer indicating the type of event. | |
| 134 | + * For information on allowable values, see | |
| 135 | + * the class description for {@link FocusEvent} | |
| 136 | + * @param temporary Equals <code>true</code> if the focus change is temporary; | |
| 137 | + * <code>false</code> otherwise | |
| 138 | + * @param opposite The other Component involved in the focus change, | |
| 139 | + * or <code>null</code> | |
| 140 | + * @throws IllegalArgumentException if <code>source</code> equals {@code null} | |
| 141 | + * @see #getSource() | |
| 142 | + * @see #getID() | |
| 143 | + * @see #isTemporary() | |
| 144 | + * @see #getOppositeComponent() | |
| 145 | + * @since 1.4 | |
| 146 | + */ | |
| 147 | + public FocusEvent(Component source, int id, boolean temporary, | |
| 148 | + Component opposite) { | |
| 149 | + super(source, id); | |
| 150 | + this.temporary = temporary; | |
| 151 | + this.opposite = opposite; | |
| 152 | + } | |
| 153 | + | |
| 154 | + /** | |
| 155 | + * Constructs a <code>FocusEvent</code> object and identifies | |
| 156 | + * whether or not the change is temporary. | |
| 157 | + * <p> This method throws an | |
| 158 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 159 | + * is <code>null</code>. | |
| 160 | + * | |
| 161 | + * @param source The <code>Component</code> that originated the event | |
| 162 | + * @param id An integer indicating the type of event. | |
| 163 | + * For information on allowable values, see | |
| 164 | + * the class description for {@link FocusEvent} | |
| 165 | + * @param temporary Equals <code>true</code> if the focus change is temporary; | |
| 166 | + * <code>false</code> otherwise | |
| 167 | + * @throws IllegalArgumentException if <code>source</code> equals {@code null} | |
| 168 | + * @see #getSource() | |
| 169 | + * @see #getID() | |
| 170 | + * @see #isTemporary() | |
| 171 | + */ | |
| 172 | + public FocusEvent(Component source, int id, boolean temporary) { | |
| 173 | + this(source, id, temporary, null); | |
| 174 | + } | |
| 175 | + | |
| 176 | + /** | |
| 177 | + * Constructs a <code>FocusEvent</code> object and identifies it | |
| 178 | + * as a permanent change in focus. | |
| 179 | + * <p> This method throws an | |
| 180 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 181 | + * is <code>null</code>. | |
| 182 | + * | |
| 183 | + * @param source The <code>Component</code> that originated the event | |
| 184 | + * @param id An integer indicating the type of event. | |
| 185 | + * For information on allowable values, see | |
| 186 | + * the class description for {@link FocusEvent} | |
| 187 | + * @throws IllegalArgumentException if <code>source</code> equals {@code null} | |
| 188 | + * @see #getSource() | |
| 189 | + * @see #getID() | |
| 190 | + */ | |
| 191 | + public FocusEvent(Component source, int id) { | |
| 192 | + this(source, id, false); | |
| 193 | + } | |
| 194 | + | |
| 195 | + /** | |
| 196 | + * Identifies the focus change event as temporary or permanent. | |
| 197 | + * | |
| 198 | + * @return <code>true</code> if the focus change is temporary; | |
| 199 | + * <code>false</code> otherwise | |
| 200 | + */ | |
| 201 | + public boolean isTemporary() { | |
| 202 | + return temporary; | |
| 203 | + } | |
| 204 | + | |
| 205 | + /** | |
| 206 | + * Returns the other Component involved in this focus change. For a | |
| 207 | + * FOCUS_GAINED event, this is the Component that lost focus. For a | |
| 208 | + * FOCUS_LOST event, this is the Component that gained focus. If this | |
| 209 | + * focus change occurs with a native application, with a Java application | |
| 210 | + * in a different VM or context, or with no other Component, then null is | |
| 211 | + * returned. | |
| 212 | + * | |
| 213 | + * @return the other Component involved in the focus change, or null | |
| 214 | + * @since 1.4 | |
| 215 | + */ | |
| 216 | + public Component getOppositeComponent() { | |
| 217 | + if (opposite == null) { | |
| 218 | + return null; | |
| 219 | + } | |
| 220 | + | |
| 221 | + return (SunToolkit.targetToAppContext(opposite) == | |
| 222 | + AppContext.getAppContext()) | |
| 223 | + ? opposite | |
| 224 | + : null; | |
| 225 | + } | |
| 226 | + | |
| 227 | + /** | |
| 228 | + * Returns a parameter string identifying this event. | |
| 229 | + * This method is useful for event-logging and for debugging. | |
| 230 | + * | |
| 231 | + * @return a string identifying the event and its attributes | |
| 232 | + */ | |
| 233 | + public String paramString() { | |
| 234 | + String typeStr; | |
| 235 | + switch(id) { | |
| 236 | + case FOCUS_GAINED: | |
| 237 | + typeStr = "FOCUS_GAINED"; | |
| 238 | + break; | |
| 239 | + case FOCUS_LOST: | |
| 240 | + typeStr = "FOCUS_LOST"; | |
| 241 | + break; | |
| 242 | + default: | |
| 243 | + typeStr = "unknown type"; | |
| 244 | + } | |
| 245 | + return typeStr + (temporary ? ",temporary" : ",permanent") + | |
| 246 | + ",opposite=" + getOppositeComponent(); | |
| 247 | + } | |
| 248 | + | |
| 249 | +} | |
Binary file not shown.
| @@ -0,0 +1,61 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListener; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * The listener interface for receiving keyboard focus events on | |
| 32 | + * a component. | |
| 33 | + * The class that is interested in processing a focus event | |
| 34 | + * either implements this interface (and all the methods it | |
| 35 | + * contains) or extends the abstract <code>FocusAdapter</code> class | |
| 36 | + * (overriding only the methods of interest). | |
| 37 | + * The listener object created from that class is then registered with a | |
| 38 | + * component using the component's <code>addFocusListener</code> | |
| 39 | + * method. When the component gains or loses the keyboard focus, | |
| 40 | + * the relevant method in the listener object | |
| 41 | + * is invoked, and the <code>FocusEvent</code> is passed to it. | |
| 42 | + * | |
| 43 | + * @see FocusAdapter | |
| 44 | + * @see FocusEvent | |
| 45 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/focuslistener.html">Tutorial: Writing a Focus Listener</a> | |
| 46 | + * | |
| 47 | + * @author Carl Quinn | |
| 48 | + * @since 1.1 | |
| 49 | + */ | |
| 50 | +public interface FocusListener extends EventListener { | |
| 51 | + | |
| 52 | + /** | |
| 53 | + * Invoked when a component gains the keyboard focus. | |
| 54 | + */ | |
| 55 | + public void focusGained(FocusEvent e); | |
| 56 | + | |
| 57 | + /** | |
| 58 | + * Invoked when a component loses the keyboard focus. | |
| 59 | + */ | |
| 60 | + public void focusLost(FocusEvent e); | |
| 61 | +} | |
Binary file not shown.
| @@ -0,0 +1,61 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +/** | |
| 29 | + * An abstract adapter class for receiving ancestor moved and resized events. | |
| 30 | + * The methods in this class are empty. This class exists as a | |
| 31 | + * convenience for creating listener objects. | |
| 32 | + * <p> | |
| 33 | + * Extend this class and override the method for the event of interest. (If | |
| 34 | + * you implement the <code>HierarchyBoundsListener</code> interface, you have | |
| 35 | + * to define both methods in it. This abstract class defines null methods for | |
| 36 | + * them both, so you only have to define the method for the event you care | |
| 37 | + * about.) | |
| 38 | + * <p> | |
| 39 | + * Create a listener object using your class and then register it with a | |
| 40 | + * Component using the Component's <code>addHierarchyBoundsListener</code> | |
| 41 | + * method. When the hierarchy to which the Component belongs changes by | |
| 42 | + * resize or movement of an ancestor, the relevant method in the listener | |
| 43 | + * object is invoked, and the <code>HierarchyEvent</code> is passed to it. | |
| 44 | + * | |
| 45 | + * @author David Mendenhall | |
| 46 | + * @see HierarchyBoundsListener | |
| 47 | + * @see HierarchyEvent | |
| 48 | + * @since 1.3 | |
| 49 | + */ | |
| 50 | +public abstract class HierarchyBoundsAdapter implements HierarchyBoundsListener | |
| 51 | +{ | |
| 52 | + /** | |
| 53 | + * Called when an ancestor of the source is moved. | |
| 54 | + */ | |
| 55 | + public void ancestorMoved(HierarchyEvent e) {} | |
| 56 | + | |
| 57 | + /** | |
| 58 | + * Called when an ancestor of the source is resized. | |
| 59 | + */ | |
| 60 | + public void ancestorResized(HierarchyEvent e) {} | |
| 61 | +} | |
Binary file not shown.
| @@ -0,0 +1,62 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListener; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * The listener interface for receiving ancestor moved and resized events. | |
| 32 | + * The class that is interested in processing these events either implements | |
| 33 | + * this interface (and all the methods it contains) or extends the abstract | |
| 34 | + * <code>HierarchyBoundsAdapter</code> class (overriding only the method of | |
| 35 | + * interest). | |
| 36 | + * The listener object created from that class is then registered with a | |
| 37 | + * Component using the Component's <code>addHierarchyBoundsListener</code> | |
| 38 | + * method. When the hierarchy to which the Component belongs changes by | |
| 39 | + * the resizing or movement of an ancestor, the relevant method in the listener | |
| 40 | + * object is invoked, and the <code>HierarchyEvent</code> is passed to it. | |
| 41 | + * <p> | |
| 42 | + * Hierarchy events are provided for notification purposes ONLY; | |
| 43 | + * The AWT will automatically handle changes to the hierarchy internally so | |
| 44 | + * that GUI layout works properly regardless of whether a | |
| 45 | + * program registers an <code>HierarchyBoundsListener</code> or not. | |
| 46 | + * | |
| 47 | + * @author David Mendenhall | |
| 48 | + * @see HierarchyBoundsAdapter | |
| 49 | + * @see HierarchyEvent | |
| 50 | + * @since 1.3 | |
| 51 | + */ | |
| 52 | +public interface HierarchyBoundsListener extends EventListener { | |
| 53 | + /** | |
| 54 | + * Called when an ancestor of the source is moved. | |
| 55 | + */ | |
| 56 | + public void ancestorMoved(HierarchyEvent e); | |
| 57 | + | |
| 58 | + /** | |
| 59 | + * Called when an ancestor of the source is resized. | |
| 60 | + */ | |
| 61 | + public void ancestorResized(HierarchyEvent e); | |
| 62 | +} | |
Binary file not shown.
| @@ -0,0 +1,337 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.awt.AWTEvent; | |
| 29 | +import java.awt.Component; | |
| 30 | +import java.awt.Container; | |
| 31 | + | |
| 32 | +/** | |
| 33 | + * An event which indicates a change to the <code>Component</code> | |
| 34 | + * hierarchy to which <code>Component</code> belongs. | |
| 35 | + * <ul> | |
| 36 | + * <li>Hierarchy Change Events (HierarchyListener) | |
| 37 | + * <ul> | |
| 38 | + * <li> addition of an ancestor | |
| 39 | + * <li> removal of an ancestor | |
| 40 | + * <li> hierarchy made displayable | |
| 41 | + * <li> hierarchy made undisplayable | |
| 42 | + * <li> hierarchy shown on the screen (both visible and displayable) | |
| 43 | + * <li> hierarchy hidden on the screen (either invisible or undisplayable) | |
| 44 | + * </ul> | |
| 45 | + * <li>Ancestor Reshape Events (HierarchyBoundsListener) | |
| 46 | + * <ul> | |
| 47 | + * <li> an ancestor was resized | |
| 48 | + * <li> an ancestor was moved | |
| 49 | + * </ul> | |
| 50 | + * </ul> | |
| 51 | + * <p> | |
| 52 | + * Hierarchy events are provided for notification purposes ONLY. | |
| 53 | + * The AWT will automatically handle changes to the hierarchy internally so | |
| 54 | + * that GUI layout and displayability works properly regardless of whether a | |
| 55 | + * program is receiving these events or not. | |
| 56 | + * <p> | |
| 57 | + * This event is generated by a Container object (such as a Panel) when the | |
| 58 | + * Container is added, removed, moved, or resized, and passed down the | |
| 59 | + * hierarchy. It is also generated by a Component object when that object's | |
| 60 | + * <code>addNotify</code>, <code>removeNotify</code>, <code>show</code>, or | |
| 61 | + * <code>hide</code> method is called. The {@code ANCESTOR_MOVED} and | |
| 62 | + * {@code ANCESTOR_RESIZED} | |
| 63 | + * events are dispatched to every <code>HierarchyBoundsListener</code> or | |
| 64 | + * <code>HierarchyBoundsAdapter</code> object which registered to receive | |
| 65 | + * such events using the Component's <code>addHierarchyBoundsListener</code> | |
| 66 | + * method. (<code>HierarchyBoundsAdapter</code> objects implement the <code> | |
| 67 | + * HierarchyBoundsListener</code> interface.) The {@code HIERARCHY_CHANGED} events are | |
| 68 | + * dispatched to every <code>HierarchyListener</code> object which registered | |
| 69 | + * to receive such events using the Component's <code>addHierarchyListener | |
| 70 | + * </code> method. Each such listener object gets this <code>HierarchyEvent | |
| 71 | + * </code> when the event occurs. | |
| 72 | + * <p> | |
| 73 | + * An unspecified behavior will be caused if the {@code id} parameter | |
| 74 | + * of any particular {@code HierarchyEvent} instance is not | |
| 75 | + * in the range from {@code HIERARCHY_FIRST} to {@code HIERARCHY_LAST}. | |
| 76 | + * <br> | |
| 77 | + * The {@code changeFlags} parameter of any {@code HierarchyEvent} instance takes one of the following | |
| 78 | + * values: | |
| 79 | + * <ul> | |
| 80 | + * <li> {@code HierarchyEvent.PARENT_CHANGED} | |
| 81 | + * <li> {@code HierarchyEvent.DISPLAYABILITY_CHANGED} | |
| 82 | + * <li> {@code HierarchyEvent.SHOWING_CHANGED} | |
| 83 | + * </ul> | |
| 84 | + * Assigning the value different from listed above will cause unspecified behavior. | |
| 85 | + * | |
| 86 | + * @author David Mendenhall | |
| 87 | + * @see HierarchyListener | |
| 88 | + * @see HierarchyBoundsAdapter | |
| 89 | + * @see HierarchyBoundsListener | |
| 90 | + * @since 1.3 | |
| 91 | + */ | |
| 92 | +public class HierarchyEvent extends AWTEvent { | |
| 93 | + /* | |
| 94 | + * serialVersionUID | |
| 95 | + */ | |
| 96 | + private static final long serialVersionUID = -5337576970038043990L; | |
| 97 | + | |
| 98 | + /** | |
| 99 | + * Marks the first integer id for the range of hierarchy event ids. | |
| 100 | + */ | |
| 101 | + public static final int HIERARCHY_FIRST = 1400; // 1300 used by sun.awt.windows.ModalityEvent | |
| 102 | + | |
| 103 | + /** | |
| 104 | + * The event id indicating that modification was made to the | |
| 105 | + * entire hierarchy tree. | |
| 106 | + */ | |
| 107 | + public static final int HIERARCHY_CHANGED = HIERARCHY_FIRST; | |
| 108 | + | |
| 109 | + /** | |
| 110 | + * The event id indicating an ancestor-Container was moved. | |
| 111 | + */ | |
| 112 | + public static final int ANCESTOR_MOVED = 1 + HIERARCHY_FIRST; | |
| 113 | + | |
| 114 | + /** | |
| 115 | + * The event id indicating an ancestor-Container was resized. | |
| 116 | + */ | |
| 117 | + public static final int ANCESTOR_RESIZED = 2 + HIERARCHY_FIRST; | |
| 118 | + | |
| 119 | + /** | |
| 120 | + * Marks the last integer id for the range of ancestor event ids. | |
| 121 | + */ | |
| 122 | + public static final int HIERARCHY_LAST = ANCESTOR_RESIZED; | |
| 123 | + | |
| 124 | + /** | |
| 125 | + * A change flag indicates that the <code>HIERARCHY_CHANGED</code> event | |
| 126 | + * was generated by a reparenting operation. | |
| 127 | + */ | |
| 128 | + public static final int PARENT_CHANGED = 0x1; | |
| 129 | + | |
| 130 | + /** | |
| 131 | + * A change flag indicates that the <code>HIERARCHY_CHANGED</code> event | |
| 132 | + * was generated due to the changing of the hierarchy displayability. | |
| 133 | + * To discern the | |
| 134 | + * current displayability of the hierarchy, call the | |
| 135 | + * <code>Component.isDisplayable</code> method. Displayability changes occur | |
| 136 | + * in response to explicit or implicit calls of the | |
| 137 | + * <code>Component.addNotify</code> and | |
| 138 | + * <code>Component.removeNotify</code> methods. | |
| 139 | + * | |
| 140 | + * @see java.awt.Component#isDisplayable() | |
| 141 | + * @see java.awt.Component#addNotify() | |
| 142 | + * @see java.awt.Component#removeNotify() | |
| 143 | + */ | |
| 144 | + public static final int DISPLAYABILITY_CHANGED = 0x2; | |
| 145 | + | |
| 146 | + /** | |
| 147 | + * A change flag indicates that the <code>HIERARCHY_CHANGED</code> event | |
| 148 | + * was generated due to the changing of the hierarchy showing state. | |
| 149 | + * To discern the | |
| 150 | + * current showing state of the hierarchy, call the | |
| 151 | + * <code>Component.isShowing</code> method. Showing state changes occur | |
| 152 | + * when either the displayability or visibility of the | |
| 153 | + * hierarchy occurs. Visibility changes occur in response to explicit | |
| 154 | + * or implicit calls of the <code>Component.show</code> and | |
| 155 | + * <code>Component.hide</code> methods. | |
| 156 | + * | |
| 157 | + * @see java.awt.Component#isShowing() | |
| 158 | + * @see java.awt.Component#addNotify() | |
| 159 | + * @see java.awt.Component#removeNotify() | |
| 160 | + * @see java.awt.Component#show() | |
| 161 | + * @see java.awt.Component#hide() | |
| 162 | + */ | |
| 163 | + public static final int SHOWING_CHANGED = 0x4; | |
| 164 | + | |
| 165 | + Component changed; | |
| 166 | + Container changedParent; | |
| 167 | + long changeFlags; | |
| 168 | + | |
| 169 | + /** | |
| 170 | + * Constructs an <code>HierarchyEvent</code> object to identify a | |
| 171 | + * change in the <code>Component</code> hierarchy. | |
| 172 | + * <p>This method throws an | |
| 173 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 174 | + * is <code>null</code>. | |
| 175 | + * | |
| 176 | + * @param source The <code>Component</code> object that | |
| 177 | + * originated the event | |
| 178 | + * @param id An integer indicating the type of event. | |
| 179 | + * For information on allowable values, see | |
| 180 | + * the class description for {@link HierarchyEvent} | |
| 181 | + * @param changed The <code>Component</code> at the top of | |
| 182 | + * the hierarchy which was changed | |
| 183 | + * @param changedParent The parent of the <code>changed</code> component. | |
| 184 | + * This | |
| 185 | + * may be the parent before or after the | |
| 186 | + * change, depending on the type of change | |
| 187 | + * @throws IllegalArgumentException if <code>source</code> is {@code null} | |
| 188 | + * @see #getSource() | |
| 189 | + * @see #getID() | |
| 190 | + * @see #getChanged() | |
| 191 | + * @see #getChangedParent() | |
| 192 | + */ | |
| 193 | + public HierarchyEvent(Component source, int id, Component changed, | |
| 194 | + Container changedParent) { | |
| 195 | + super(source, id); | |
| 196 | + this.changed = changed; | |
| 197 | + this.changedParent = changedParent; | |
| 198 | + } | |
| 199 | + | |
| 200 | + /** | |
| 201 | + * Constructs an <code>HierarchyEvent</code> object to identify | |
| 202 | + * a change in the <code>Component</code> hierarchy. | |
| 203 | + * <p> This method throws an | |
| 204 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 205 | + * is <code>null</code>. | |
| 206 | + * | |
| 207 | + * @param source The <code>Component</code> object that | |
| 208 | + * originated the event | |
| 209 | + * @param id An integer indicating the type of event. | |
| 210 | + * For information on allowable values, see | |
| 211 | + * the class description for {@link HierarchyEvent} | |
| 212 | + * @param changed The <code>Component</code> at the top | |
| 213 | + * of the hierarchy which was changed | |
| 214 | + * @param changedParent The parent of the <code>changed</code> component. | |
| 215 | + * This | |
| 216 | + * may be the parent before or after the | |
| 217 | + * change, depending on the type of change | |
| 218 | + * @param changeFlags A bitmask which indicates the type(s) of | |
| 219 | + * the <code>HIERARCHY_CHANGED</code> events | |
| 220 | + * represented in this event object. | |
| 221 | + * For information on allowable values, see | |
| 222 | + * the class description for {@link HierarchyEvent} | |
| 223 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 224 | + * @see #getSource() | |
| 225 | + * @see #getID() | |
| 226 | + * @see #getChanged() | |
| 227 | + * @see #getChangedParent() | |
| 228 | + * @see #getChangeFlags() | |
| 229 | + */ | |
| 230 | + public HierarchyEvent(Component source, int id, Component changed, | |
| 231 | + Container changedParent, long changeFlags) { | |
| 232 | + super(source, id); | |
| 233 | + this.changed = changed; | |
| 234 | + this.changedParent = changedParent; | |
| 235 | + this.changeFlags = changeFlags; | |
| 236 | + } | |
| 237 | + | |
| 238 | + /** | |
| 239 | + * Returns the originator of the event. | |
| 240 | + * | |
| 241 | + * @return the <code>Component</code> object that originated | |
| 242 | + * the event, or <code>null</code> if the object is not a | |
| 243 | + * <code>Component</code>. | |
| 244 | + */ | |
| 245 | + public Component getComponent() { | |
| 246 | + return (source instanceof Component) ? (Component)source : null; | |
| 247 | + } | |
| 248 | + | |
| 249 | + /** | |
| 250 | + * Returns the Component at the top of the hierarchy which was | |
| 251 | + * changed. | |
| 252 | + * | |
| 253 | + * @return the changed Component | |
| 254 | + */ | |
| 255 | + public Component getChanged() { | |
| 256 | + return changed; | |
| 257 | + } | |
| 258 | + | |
| 259 | + /** | |
| 260 | + * Returns the parent of the Component returned by <code> | |
| 261 | + * getChanged()</code>. For a HIERARCHY_CHANGED event where the | |
| 262 | + * change was of type PARENT_CHANGED via a call to <code> | |
| 263 | + * Container.add</code>, the parent returned is the parent | |
| 264 | + * after the add operation. For a HIERARCHY_CHANGED event where | |
| 265 | + * the change was of type PARENT_CHANGED via a call to <code> | |
| 266 | + * Container.remove</code>, the parent returned is the parent | |
| 267 | + * before the remove operation. For all other events and types, | |
| 268 | + * the parent returned is the parent during the operation. | |
| 269 | + * | |
| 270 | + * @return the parent of the changed Component | |
| 271 | + */ | |
| 272 | + public Container getChangedParent() { | |
| 273 | + return changedParent; | |
| 274 | + } | |
| 275 | + | |
| 276 | + /** | |
| 277 | + * Returns a bitmask which indicates the type(s) of | |
| 278 | + * HIERARCHY_CHANGED events represented in this event object. | |
| 279 | + * The bits have been bitwise-ored together. | |
| 280 | + * | |
| 281 | + * @return the bitmask, or 0 if this is not an HIERARCHY_CHANGED | |
| 282 | + * event | |
| 283 | + */ | |
| 284 | + public long getChangeFlags() { | |
| 285 | + return changeFlags; | |
| 286 | + } | |
| 287 | + | |
| 288 | + /** | |
| 289 | + * Returns a parameter string identifying this event. | |
| 290 | + * This method is useful for event-logging and for debugging. | |
| 291 | + * | |
| 292 | + * @return a string identifying the event and its attributes | |
| 293 | + */ | |
| 294 | + public String paramString() { | |
| 295 | + String typeStr; | |
| 296 | + switch(id) { | |
| 297 | + case ANCESTOR_MOVED: | |
| 298 | + typeStr = "ANCESTOR_MOVED ("+changed+","+changedParent+")"; | |
| 299 | + break; | |
| 300 | + case ANCESTOR_RESIZED: | |
| 301 | + typeStr = "ANCESTOR_RESIZED ("+changed+","+changedParent+")"; | |
| 302 | + break; | |
| 303 | + case HIERARCHY_CHANGED: { | |
| 304 | + typeStr = "HIERARCHY_CHANGED ("; | |
| 305 | + boolean first = true; | |
| 306 | + if ((changeFlags & PARENT_CHANGED) != 0) { | |
| 307 | + first = false; | |
| 308 | + typeStr += "PARENT_CHANGED"; | |
| 309 | + } | |
| 310 | + if ((changeFlags & DISPLAYABILITY_CHANGED) != 0) { | |
| 311 | + if (first) { | |
| 312 | + first = false; | |
| 313 | + } else { | |
| 314 | + typeStr += ","; | |
| 315 | + } | |
| 316 | + typeStr += "DISPLAYABILITY_CHANGED"; | |
| 317 | + } | |
| 318 | + if ((changeFlags & SHOWING_CHANGED) != 0) { | |
| 319 | + if (first) { | |
| 320 | + first = false; | |
| 321 | + } else { | |
| 322 | + typeStr += ","; | |
| 323 | + } | |
| 324 | + typeStr += "SHOWING_CHANGED"; | |
| 325 | + } | |
| 326 | + if (!first) { | |
| 327 | + typeStr += ","; | |
| 328 | + } | |
| 329 | + typeStr += changed + "," + changedParent + ")"; | |
| 330 | + break; | |
| 331 | + } | |
| 332 | + default: | |
| 333 | + typeStr = "unknown type"; | |
| 334 | + } | |
| 335 | + return typeStr; | |
| 336 | + } | |
| 337 | +} | |
Binary file not shown.
| @@ -0,0 +1,57 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListener; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * The listener interface for receiving hierarchy changed events. | |
| 32 | + * The class that is interested in processing a hierarchy changed event | |
| 33 | + * should implement this interface. | |
| 34 | + * The listener object created from that class is then registered with a | |
| 35 | + * Component using the Component's <code>addHierarchyListener</code> | |
| 36 | + * method. When the hierarchy to which the Component belongs changes, the | |
| 37 | + * <code>hierarchyChanged</code> method in the listener object is invoked, | |
| 38 | + * and the <code>HierarchyEvent</code> is passed to it. | |
| 39 | + * <p> | |
| 40 | + * Hierarchy events are provided for notification purposes ONLY; | |
| 41 | + * The AWT will automatically handle changes to the hierarchy internally so | |
| 42 | + * that GUI layout, displayability, and visibility work properly regardless | |
| 43 | + * of whether a program registers a <code>HierarchyListener</code> or not. | |
| 44 | + * | |
| 45 | + * @author David Mendenhall | |
| 46 | + * @see HierarchyEvent | |
| 47 | + * @since 1.3 | |
| 48 | + */ | |
| 49 | +public interface HierarchyListener extends EventListener { | |
| 50 | + /** | |
| 51 | + * Called when the hierarchy has been changed. To discern the actual | |
| 52 | + * type of change, call <code>HierarchyEvent.getChangeFlags()</code>. | |
| 53 | + * | |
| 54 | + * @see HierarchyEvent#getChangeFlags() | |
| 55 | + */ | |
| 56 | + public void hierarchyChanged(HierarchyEvent e); | |
| 57 | +} | |
Binary file not shown.
Binary file not shown.
| @@ -0,0 +1,527 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.awt.Event; | |
| 29 | +import java.awt.Component; | |
| 30 | +import java.awt.GraphicsEnvironment; | |
| 31 | +import java.awt.Toolkit; | |
| 32 | +import java.util.Arrays; | |
| 33 | + | |
| 34 | +import sun.awt.AWTAccessor; | |
| 35 | +import sun.util.logging.PlatformLogger; | |
| 36 | + | |
| 37 | +/** | |
| 38 | + * The root event class for all component-level input events. | |
| 39 | + * | |
| 40 | + * Input events are delivered to listeners before they are | |
| 41 | + * processed normally by the source where they originated. | |
| 42 | + * This allows listeners and component subclasses to "consume" | |
| 43 | + * the event so that the source will not process them in their | |
| 44 | + * default manner. For example, consuming mousePressed events | |
| 45 | + * on a Button component will prevent the Button from being | |
| 46 | + * activated. | |
| 47 | + * | |
| 48 | + * @author Carl Quinn | |
| 49 | + * | |
| 50 | + * @see KeyEvent | |
| 51 | + * @see KeyAdapter | |
| 52 | + * @see MouseEvent | |
| 53 | + * @see MouseAdapter | |
| 54 | + * @see MouseMotionAdapter | |
| 55 | + * | |
| 56 | + * @since 1.1 | |
| 57 | + */ | |
| 58 | +public abstract class InputEvent extends ComponentEvent { | |
| 59 | + | |
| 60 | + private static final PlatformLogger logger = PlatformLogger.getLogger("java.awt.event.InputEvent"); | |
| 61 | + | |
| 62 | + /** | |
| 63 | + * The Shift key modifier constant. | |
| 64 | + * It is recommended that SHIFT_DOWN_MASK be used instead. | |
| 65 | + */ | |
| 66 | + public static final int SHIFT_MASK = Event.SHIFT_MASK; | |
| 67 | + | |
| 68 | + /** | |
| 69 | + * The Control key modifier constant. | |
| 70 | + * It is recommended that CTRL_DOWN_MASK be used instead. | |
| 71 | + */ | |
| 72 | + public static final int CTRL_MASK = Event.CTRL_MASK; | |
| 73 | + | |
| 74 | + /** | |
| 75 | + * The Meta key modifier constant. | |
| 76 | + * It is recommended that META_DOWN_MASK be used instead. | |
| 77 | + */ | |
| 78 | + public static final int META_MASK = Event.META_MASK; | |
| 79 | + | |
| 80 | + /** | |
| 81 | + * The Alt key modifier constant. | |
| 82 | + * It is recommended that ALT_DOWN_MASK be used instead. | |
| 83 | + */ | |
| 84 | + public static final int ALT_MASK = Event.ALT_MASK; | |
| 85 | + | |
| 86 | + /** | |
| 87 | + * The AltGraph key modifier constant. | |
| 88 | + */ | |
| 89 | + public static final int ALT_GRAPH_MASK = 1 << 5; | |
| 90 | + | |
| 91 | + /** | |
| 92 | + * The Mouse Button1 modifier constant. | |
| 93 | + * It is recommended that BUTTON1_DOWN_MASK be used instead. | |
| 94 | + */ | |
| 95 | + public static final int BUTTON1_MASK = 1 << 4; | |
| 96 | + | |
| 97 | + /** | |
| 98 | + * The Mouse Button2 modifier constant. | |
| 99 | + * It is recommended that BUTTON2_DOWN_MASK be used instead. | |
| 100 | + * Note that BUTTON2_MASK has the same value as ALT_MASK. | |
| 101 | + */ | |
| 102 | + public static final int BUTTON2_MASK = Event.ALT_MASK; | |
| 103 | + | |
| 104 | + /** | |
| 105 | + * The Mouse Button3 modifier constant. | |
| 106 | + * It is recommended that BUTTON3_DOWN_MASK be used instead. | |
| 107 | + * Note that BUTTON3_MASK has the same value as META_MASK. | |
| 108 | + */ | |
| 109 | + public static final int BUTTON3_MASK = Event.META_MASK; | |
| 110 | + | |
| 111 | + /** | |
| 112 | + * The Shift key extended modifier constant. | |
| 113 | + * @since 1.4 | |
| 114 | + */ | |
| 115 | + public static final int SHIFT_DOWN_MASK = 1 << 6; | |
| 116 | + | |
| 117 | + /** | |
| 118 | + * The Control key extended modifier constant. | |
| 119 | + * @since 1.4 | |
| 120 | + */ | |
| 121 | + public static final int CTRL_DOWN_MASK = 1 << 7; | |
| 122 | + | |
| 123 | + /** | |
| 124 | + * The Meta key extended modifier constant. | |
| 125 | + * @since 1.4 | |
| 126 | + */ | |
| 127 | + public static final int META_DOWN_MASK = 1 << 8; | |
| 128 | + | |
| 129 | + /** | |
| 130 | + * The Alt key extended modifier constant. | |
| 131 | + * @since 1.4 | |
| 132 | + */ | |
| 133 | + public static final int ALT_DOWN_MASK = 1 << 9; | |
| 134 | + | |
| 135 | + /** | |
| 136 | + * The Mouse Button1 extended modifier constant. | |
| 137 | + * @since 1.4 | |
| 138 | + */ | |
| 139 | + public static final int BUTTON1_DOWN_MASK = 1 << 10; | |
| 140 | + | |
| 141 | + /** | |
| 142 | + * The Mouse Button2 extended modifier constant. | |
| 143 | + * @since 1.4 | |
| 144 | + */ | |
| 145 | + public static final int BUTTON2_DOWN_MASK = 1 << 11; | |
| 146 | + | |
| 147 | + /** | |
| 148 | + * The Mouse Button3 extended modifier constant. | |
| 149 | + * @since 1.4 | |
| 150 | + */ | |
| 151 | + public static final int BUTTON3_DOWN_MASK = 1 << 12; | |
| 152 | + | |
| 153 | + /** | |
| 154 | + * The AltGraph key extended modifier constant. | |
| 155 | + * @since 1.4 | |
| 156 | + */ | |
| 157 | + public static final int ALT_GRAPH_DOWN_MASK = 1 << 13; | |
| 158 | + | |
| 159 | + /** | |
| 160 | + * An array of extended modifiers for additional buttons. | |
| 161 | + * @see getButtonDownMasks | |
| 162 | + * There are twenty buttons fit into 4byte space. | |
| 163 | + * one more bit is reserved for FIRST_HIGH_BIT. | |
| 164 | + * @since 7.0 | |
| 165 | + */ | |
| 166 | + private static final int [] BUTTON_DOWN_MASK = new int [] { BUTTON1_DOWN_MASK, | |
| 167 | + BUTTON2_DOWN_MASK, | |
| 168 | + BUTTON3_DOWN_MASK, | |
| 169 | + 1<<14, //4th phisical button (this is not a wheel!) | |
| 170 | + 1<<15, //(this is not a wheel!) | |
| 171 | + 1<<16, | |
| 172 | + 1<<17, | |
| 173 | + 1<<18, | |
| 174 | + 1<<19, | |
| 175 | + 1<<20, | |
| 176 | + 1<<21, | |
| 177 | + 1<<22, | |
| 178 | + 1<<23, | |
| 179 | + 1<<24, | |
| 180 | + 1<<25, | |
| 181 | + 1<<26, | |
| 182 | + 1<<27, | |
| 183 | + 1<<28, | |
| 184 | + 1<<29, | |
| 185 | + 1<<30}; | |
| 186 | + | |
| 187 | + /** | |
| 188 | + * A method to access an array of extended modifiers for additional buttons. | |
| 189 | + * @since 7.0 | |
| 190 | + */ | |
| 191 | + private static int [] getButtonDownMasks(){ | |
| 192 | + return Arrays.copyOf(BUTTON_DOWN_MASK, BUTTON_DOWN_MASK.length); | |
| 193 | + } | |
| 194 | + | |
| 195 | + | |
| 196 | + /** | |
| 197 | + * A method to obtain a mask for any existing mouse button. | |
| 198 | + * The returned mask may be used for different purposes. Following are some of them: | |
| 199 | + * <ul> | |
| 200 | + * <li> {@link java.awt.Robot#mousePress(int) mousePress(buttons)} and | |
| 201 | + * {@link java.awt.Robot#mouseRelease(int) mouseRelease(buttons)} | |
| 202 | + * <li> as a {@code modifiers} parameter when creating a new {@link MouseEvent} instance | |
| 203 | + * <li> to check {@link MouseEvent#getModifiersEx() modifiersEx} of existing {@code MouseEvent} | |
| 204 | + * </ul> | |
| 205 | + * @param button is a number to represent a button starting from 1. | |
| 206 | + * For example, | |
| 207 | + * <pre> | |
| 208 | + * int button = InputEvent.getMaskForButton(1); | |
| 209 | + * </pre> | |
| 210 | + * will have the same meaning as | |
| 211 | + * <pre> | |
| 212 | + * int button = InputEvent.getMaskForButton(MouseEvent.BUTTON1); | |
| 213 | + * </pre> | |
| 214 | + * because {@link MouseEvent#BUTTON1 MouseEvent.BUTTON1} equals to 1. | |
| 215 | + * If a mouse has three enabled buttons(see {@link java.awt.MouseInfo#getNumberOfButtons() MouseInfo.getNumberOfButtons()}) | |
| 216 | + * then the values from the left column passed into the method will return | |
| 217 | + * corresponding values from the right column: | |
| 218 | + * <PRE> | |
| 219 | + * <b>button </b> <b>returned mask</b> | |
| 220 | + * {@link MouseEvent#BUTTON1 BUTTON1} {@link MouseEvent#BUTTON1_DOWN_MASK BUTTON1_DOWN_MASK} | |
| 221 | + * {@link MouseEvent#BUTTON2 BUTTON2} {@link MouseEvent#BUTTON2_DOWN_MASK BUTTON2_DOWN_MASK} | |
| 222 | + * {@link MouseEvent#BUTTON3 BUTTON3} {@link MouseEvent#BUTTON3_DOWN_MASK BUTTON3_DOWN_MASK} | |
| 223 | + * </PRE> | |
| 224 | + * If a mouse has more than three enabled buttons then more values | |
| 225 | + * are admissible (4, 5, etc.). There is no assigned constants for these extended buttons. | |
| 226 | + * The button masks for the extra buttons returned by this method have no assigned names like the | |
| 227 | + * first three button masks. | |
| 228 | + * <p> | |
| 229 | + * This method has the following implementation restriction. | |
| 230 | + * It returns masks for a limited number of buttons only. The maximum number is | |
| 231 | + * implementation dependent and may vary. | |
| 232 | + * This limit is defined by the relevant number | |
| 233 | + * of buttons that may hypothetically exist on the mouse but it is greater than the | |
| 234 | + * {@link java.awt.MouseInfo#getNumberOfButtons() MouseInfo.getNumberOfButtons()}. | |
| 235 | + * <p> | |
| 236 | + * @throws IllegalArgumentException if {@code button} is less than zero or greater than the number | |
| 237 | + * of button masks reserved for buttons | |
| 238 | + * @since 7.0 | |
| 239 | + * @see java.awt.MouseInfo#getNumberOfButtons() | |
| 240 | + * @see Toolkit#areExtraMouseButtonsEnabled() | |
| 241 | + * @see MouseEvent#getModifiers() | |
| 242 | + * @see MouseEvent#getModifiersEx() | |
| 243 | + */ | |
| 244 | + public static int getMaskForButton(int button) { | |
| 245 | + if (button <= 0 || button > BUTTON_DOWN_MASK.length) { | |
| 246 | + throw new IllegalArgumentException("button doesn\'t exist " + button); | |
| 247 | + } | |
| 248 | + return BUTTON_DOWN_MASK[button - 1]; | |
| 249 | + } | |
| 250 | + | |
| 251 | + // the constant below MUST be updated if any extra modifier | |
| 252 | + // bits are to be added! | |
| 253 | + // in fact, it is undesirable to add modifier bits | |
| 254 | + // to the same field as this may break applications | |
| 255 | + // see bug# 5066958 | |
| 256 | + static final int FIRST_HIGH_BIT = 1 << 31; | |
| 257 | + | |
| 258 | + static final int JDK_1_3_MODIFIERS = SHIFT_DOWN_MASK - 1; | |
| 259 | + static final int HIGH_MODIFIERS = ~( FIRST_HIGH_BIT - 1 ); | |
| 260 | + | |
| 261 | + /** | |
| 262 | + * The input event's Time stamp in UTC format. The time stamp | |
| 263 | + * indicates when the input event was created. | |
| 264 | + * | |
| 265 | + * @serial | |
| 266 | + * @see #getWhen() | |
| 267 | + */ | |
| 268 | + long when; | |
| 269 | + | |
| 270 | + /** | |
| 271 | + * The state of the modifier mask at the time the input | |
| 272 | + * event was fired. | |
| 273 | + * | |
| 274 | + * @serial | |
| 275 | + * @see #getModifiers() | |
| 276 | + * @see #getModifiersEx() | |
| 277 | + * @see java.awt.event.KeyEvent | |
| 278 | + * @see java.awt.event.MouseEvent | |
| 279 | + */ | |
| 280 | + int modifiers; | |
| 281 | + | |
| 282 | + /* | |
| 283 | + * A flag that indicates that this instance can be used to access | |
| 284 | + * the system clipboard. | |
| 285 | + */ | |
| 286 | + private transient boolean canAccessSystemClipboard; | |
| 287 | + | |
| 288 | + static { | |
| 289 | + /* ensure that the necessary native libraries are loaded */ | |
| 290 | + NativeLibLoader.loadLibraries(); | |
| 291 | + if (!GraphicsEnvironment.isHeadless()) { | |
| 292 | + initIDs(); | |
| 293 | + } | |
| 294 | + AWTAccessor.setInputEventAccessor( | |
| 295 | + new AWTAccessor.InputEventAccessor() { | |
| 296 | + public int[] getButtonDownMasks() { | |
| 297 | + return InputEvent.getButtonDownMasks(); | |
| 298 | + } | |
| 299 | + }); | |
| 300 | + } | |
| 301 | + | |
| 302 | + /** | |
| 303 | + * Initialize JNI field and method IDs for fields that may be | |
| 304 | + accessed from C. | |
| 305 | + */ | |
| 306 | + private static native void initIDs(); | |
| 307 | + | |
| 308 | + /** | |
| 309 | + * Constructs an InputEvent object with the specified source component, | |
| 310 | + * modifiers, and type. | |
| 311 | + * <p> This method throws an | |
| 312 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 313 | + * is <code>null</code>. | |
| 314 | + * | |
| 315 | + * @param source the object where the event originated | |
| 316 | + * @param id the integer that identifies the event type. | |
| 317 | + * It is allowed to pass as parameter any value that | |
| 318 | + * allowed for some subclass of {@code InputEvent} class. | |
| 319 | + * Passing in the value different from those values result | |
| 320 | + * in unspecified behavior | |
| 321 | + * @param when a long int that gives the time the event occurred. | |
| 322 | + * Passing negative or zero value | |
| 323 | + * is not recommended | |
| 324 | + * @param modifiers the modifier keys down during event (e.g. shift, ctrl, | |
| 325 | + * alt, meta) | |
| 326 | + * Passing negative parameter is not recommended. | |
| 327 | + * Zero value means no modifiers. | |
| 328 | + * Either extended _DOWN_MASK or old _MASK modifiers | |
| 329 | + * should be used, but both models should not be mixed | |
| 330 | + * in one event. Use of the extended modifiers is | |
| 331 | + * preferred | |
| 332 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 333 | + * @see #getSource() | |
| 334 | + * @see #getID() | |
| 335 | + * @see #getWhen() | |
| 336 | + * @see #getModifiers() | |
| 337 | + */ | |
| 338 | + InputEvent(Component source, int id, long when, int modifiers) { | |
| 339 | + super(source, id); | |
| 340 | + this.when = when; | |
| 341 | + this.modifiers = modifiers; | |
| 342 | + canAccessSystemClipboard = canAccessSystemClipboard(); | |
| 343 | + } | |
| 344 | + | |
| 345 | + private boolean canAccessSystemClipboard() { | |
| 346 | + boolean b = false; | |
| 347 | + | |
| 348 | + if (!GraphicsEnvironment.isHeadless()) { | |
| 349 | + SecurityManager sm = System.getSecurityManager(); | |
| 350 | + if (sm != null) { | |
| 351 | + try { | |
| 352 | + sm.checkSystemClipboardAccess(); | |
| 353 | + b = true; | |
| 354 | + } catch (SecurityException se) { | |
| 355 | + if (logger.isLoggable(PlatformLogger.FINE)) { | |
| 356 | + logger.fine("InputEvent.canAccessSystemClipboard() got SecurityException ", se); | |
| 357 | + } | |
| 358 | + } | |
| 359 | + } else { | |
| 360 | + b = true; | |
| 361 | + } | |
| 362 | + } | |
| 363 | + | |
| 364 | + return b; | |
| 365 | + } | |
| 366 | + | |
| 367 | + /** | |
| 368 | + * Returns whether or not the Shift modifier is down on this event. | |
| 369 | + */ | |
| 370 | + public boolean isShiftDown() { | |
| 371 | + return (modifiers & SHIFT_MASK) != 0; | |
| 372 | + } | |
| 373 | + | |
| 374 | + /** | |
| 375 | + * Returns whether or not the Control modifier is down on this event. | |
| 376 | + */ | |
| 377 | + public boolean isControlDown() { | |
| 378 | + return (modifiers & CTRL_MASK) != 0; | |
| 379 | + } | |
| 380 | + | |
| 381 | + /** | |
| 382 | + * Returns whether or not the Meta modifier is down on this event. | |
| 383 | + */ | |
| 384 | + public boolean isMetaDown() { | |
| 385 | + return (modifiers & META_MASK) != 0; | |
| 386 | + } | |
| 387 | + | |
| 388 | + /** | |
| 389 | + * Returns whether or not the Alt modifier is down on this event. | |
| 390 | + */ | |
| 391 | + public boolean isAltDown() { | |
| 392 | + return (modifiers & ALT_MASK) != 0; | |
| 393 | + } | |
| 394 | + | |
| 395 | + /** | |
| 396 | + * Returns whether or not the AltGraph modifier is down on this event. | |
| 397 | + */ | |
| 398 | + public boolean isAltGraphDown() { | |
| 399 | + return (modifiers & ALT_GRAPH_MASK) != 0; | |
| 400 | + } | |
| 401 | + | |
| 402 | + /** | |
| 403 | + * Returns the difference in milliseconds between the timestamp of when this event occurred and | |
| 404 | + * midnight, January 1, 1970 UTC. | |
| 405 | + */ | |
| 406 | + public long getWhen() { | |
| 407 | + return when; | |
| 408 | + } | |
| 409 | + | |
| 410 | + /** | |
| 411 | + * Returns the modifier mask for this event. | |
| 412 | + */ | |
| 413 | + public int getModifiers() { | |
| 414 | + return modifiers & (JDK_1_3_MODIFIERS | HIGH_MODIFIERS); | |
| 415 | + } | |
| 416 | + | |
| 417 | + /** | |
| 418 | + * Returns the extended modifier mask for this event. | |
| 419 | + * Extended modifiers represent the state of all modal keys, | |
| 420 | + * such as ALT, CTRL, META, and the mouse buttons just after | |
| 421 | + * the event occurred | |
| 422 | + * <P> | |
| 423 | + * For example, if the user presses <b>button 1</b> followed by | |
| 424 | + * <b>button 2</b>, and then releases them in the same order, | |
| 425 | + * the following sequence of events is generated: | |
| 426 | + * <PRE> | |
| 427 | + * <code>MOUSE_PRESSED</code>: <code>BUTTON1_DOWN_MASK</code> | |
| 428 | + * <code>MOUSE_PRESSED</code>: <code>BUTTON1_DOWN_MASK | BUTTON2_DOWN_MASK</code> | |
| 429 | + * <code>MOUSE_RELEASED</code>: <code>BUTTON2_DOWN_MASK</code> | |
| 430 | + * <code>MOUSE_CLICKED</code>: <code>BUTTON2_DOWN_MASK</code> | |
| 431 | + * <code>MOUSE_RELEASED</code>: | |
| 432 | + * <code>MOUSE_CLICKED</code>: | |
| 433 | + * </PRE> | |
| 434 | + * <P> | |
| 435 | + * It is not recommended to compare the return value of this method | |
| 436 | + * using <code>==</code> because new modifiers can be added in the future. | |
| 437 | + * For example, the appropriate way to check that SHIFT and BUTTON1 are | |
| 438 | + * down, but CTRL is up is demonstrated by the following code: | |
| 439 | + * <PRE> | |
| 440 | + * int onmask = SHIFT_DOWN_MASK | BUTTON1_DOWN_MASK; | |
| 441 | + * int offmask = CTRL_DOWN_MASK; | |
| 442 | + * if ((event.getModifiersEx() & (onmask | offmask)) == onmask) { | |
| 443 | + * ... | |
| 444 | + * } | |
| 445 | + * </PRE> | |
| 446 | + * The above code will work even if new modifiers are added. | |
| 447 | + * | |
| 448 | + * @since 1.4 | |
| 449 | + */ | |
| 450 | + public int getModifiersEx() { | |
| 451 | + return modifiers & ~JDK_1_3_MODIFIERS; | |
| 452 | + } | |
| 453 | + | |
| 454 | + /** | |
| 455 | + * Consumes this event so that it will not be processed | |
| 456 | + * in the default manner by the source which originated it. | |
| 457 | + */ | |
| 458 | + public void consume() { | |
| 459 | + consumed = true; | |
| 460 | + } | |
| 461 | + | |
| 462 | + /** | |
| 463 | + * Returns whether or not this event has been consumed. | |
| 464 | + * @see #consume | |
| 465 | + */ | |
| 466 | + public boolean isConsumed() { | |
| 467 | + return consumed; | |
| 468 | + } | |
| 469 | + | |
| 470 | + // state serialization compatibility with JDK 1.1 | |
| 471 | + static final long serialVersionUID = -2482525981698309786L; | |
| 472 | + | |
| 473 | + /** | |
| 474 | + * Returns a String describing the extended modifier keys and | |
| 475 | + * mouse buttons, such as "Shift", "Button1", or "Ctrl+Shift". | |
| 476 | + * These strings can be localized by changing the | |
| 477 | + * <code>awt.properties</code> file. | |
| 478 | + * <p> | |
| 479 | + * Note that passing negative parameter is incorrect, | |
| 480 | + * and will cause the returning an unspecified string. | |
| 481 | + * Zero parameter means that no modifiers were passed and will | |
| 482 | + * cause the returning an empty string. | |
| 483 | + * | |
| 484 | + * @param modifiers a modifier mask describing the extended | |
| 485 | + * modifier keys and mouse buttons for the event | |
| 486 | + * @return a text description of the combination of extended | |
| 487 | + * modifier keys and mouse buttons that were held down | |
| 488 | + * during the event. | |
| 489 | + * @since 1.4 | |
| 490 | + */ | |
| 491 | + public static String getModifiersExText(int modifiers) { | |
| 492 | + StringBuilder buf = new StringBuilder(); | |
| 493 | + if ((modifiers & InputEvent.META_DOWN_MASK) != 0) { | |
| 494 | + buf.append(Toolkit.getProperty("AWT.meta", "Meta")); | |
| 495 | + buf.append("+"); | |
| 496 | + } | |
| 497 | + if ((modifiers & InputEvent.CTRL_DOWN_MASK) != 0) { | |
| 498 | + buf.append(Toolkit.getProperty("AWT.control", "Ctrl")); | |
| 499 | + buf.append("+"); | |
| 500 | + } | |
| 501 | + if ((modifiers & InputEvent.ALT_DOWN_MASK) != 0) { | |
| 502 | + buf.append(Toolkit.getProperty("AWT.alt", "Alt")); | |
| 503 | + buf.append("+"); | |
| 504 | + } | |
| 505 | + if ((modifiers & InputEvent.SHIFT_DOWN_MASK) != 0) { | |
| 506 | + buf.append(Toolkit.getProperty("AWT.shift", "Shift")); | |
| 507 | + buf.append("+"); | |
| 508 | + } | |
| 509 | + if ((modifiers & InputEvent.ALT_GRAPH_DOWN_MASK) != 0) { | |
| 510 | + buf.append(Toolkit.getProperty("AWT.altGraph", "Alt Graph")); | |
| 511 | + buf.append("+"); | |
| 512 | + } | |
| 513 | + | |
| 514 | + int buttonNumber = 1; | |
| 515 | + for (int mask : InputEvent.BUTTON_DOWN_MASK){ | |
| 516 | + if ((modifiers & mask) != 0) { | |
| 517 | + buf.append(Toolkit.getProperty("AWT.button"+buttonNumber, "Button"+buttonNumber)); | |
| 518 | + buf.append("+"); | |
| 519 | + } | |
| 520 | + buttonNumber++; | |
| 521 | + } | |
| 522 | + if (buf.length() > 0) { | |
| 523 | + buf.setLength(buf.length()-1); // remove trailing '+' | |
| 524 | + } | |
| 525 | + return buf.toString(); | |
| 526 | + } | |
| 527 | +} | |
Binary file not shown.
| @@ -0,0 +1,416 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.awt.AWTEvent; | |
| 29 | +import java.awt.Component; | |
| 30 | +import java.awt.EventQueue; | |
| 31 | +import java.awt.font.TextHitInfo; | |
| 32 | +import java.io.IOException; | |
| 33 | +import java.io.ObjectInputStream; | |
| 34 | +import java.text.AttributedCharacterIterator; | |
| 35 | +import java.text.CharacterIterator; | |
| 36 | + | |
| 37 | +/** | |
| 38 | + * Input method events contain information about text that is being | |
| 39 | + * composed using an input method. Whenever the text changes, the | |
| 40 | + * input method sends an event. If the text component that's currently | |
| 41 | + * using the input method is an active client, the event is dispatched | |
| 42 | + * to that component. Otherwise, it is dispatched to a separate | |
| 43 | + * composition window. | |
| 44 | + * | |
| 45 | + * <p> | |
| 46 | + * The text included with the input method event consists of two parts: | |
| 47 | + * committed text and composed text. Either part may be empty. The two | |
| 48 | + * parts together replace any uncommitted composed text sent in previous events, | |
| 49 | + * or the currently selected committed text. | |
| 50 | + * Committed text should be integrated into the text component's persistent | |
| 51 | + * data, it will not be sent again. Composed text may be sent repeatedly, | |
| 52 | + * with changes to reflect the user's editing operations. Committed text | |
| 53 | + * always precedes composed text. | |
| 54 | + * | |
| 55 | + * @author JavaSoft Asia/Pacific | |
| 56 | + * @since 1.2 | |
| 57 | + */ | |
| 58 | + | |
| 59 | +public class InputMethodEvent extends AWTEvent { | |
| 60 | + | |
| 61 | + /** | |
| 62 | + * Serial Version ID. | |
| 63 | + */ | |
| 64 | + private static final long serialVersionUID = 4727190874778922661L; | |
| 65 | + | |
| 66 | + /** | |
| 67 | + * Marks the first integer id for the range of input method event ids. | |
| 68 | + */ | |
| 69 | + public static final int INPUT_METHOD_FIRST = 1100; | |
| 70 | + | |
| 71 | + /** | |
| 72 | + * The event type indicating changed input method text. This event is | |
| 73 | + * generated by input methods while processing input. | |
| 74 | + */ | |
| 75 | + public static final int INPUT_METHOD_TEXT_CHANGED = INPUT_METHOD_FIRST; | |
| 76 | + | |
| 77 | + /** | |
| 78 | + * The event type indicating a changed insertion point in input method text. | |
| 79 | + * This event is | |
| 80 | + * generated by input methods while processing input if only the caret changed. | |
| 81 | + */ | |
| 82 | + public static final int CARET_POSITION_CHANGED = INPUT_METHOD_FIRST + 1; | |
| 83 | + | |
| 84 | + /** | |
| 85 | + * Marks the last integer id for the range of input method event ids. | |
| 86 | + */ | |
| 87 | + public static final int INPUT_METHOD_LAST = INPUT_METHOD_FIRST + 1; | |
| 88 | + | |
| 89 | + /** | |
| 90 | + * The time stamp that indicates when the event was created. | |
| 91 | + * | |
| 92 | + * @serial | |
| 93 | + * @see #getWhen | |
| 94 | + * @since 1.4 | |
| 95 | + */ | |
| 96 | + long when; | |
| 97 | + | |
| 98 | + // Text object | |
| 99 | + private transient AttributedCharacterIterator text; | |
| 100 | + private transient int committedCharacterCount; | |
| 101 | + private transient TextHitInfo caret; | |
| 102 | + private transient TextHitInfo visiblePosition; | |
| 103 | + | |
| 104 | + /** | |
| 105 | + * Constructs an <code>InputMethodEvent</code> with the specified | |
| 106 | + * source component, type, time, text, caret, and visiblePosition. | |
| 107 | + * <p> | |
| 108 | + * The offsets of caret and visiblePosition are relative to the current | |
| 109 | + * composed text; that is, the composed text within <code>text</code> | |
| 110 | + * if this is an <code>INPUT_METHOD_TEXT_CHANGED</code> event, | |
| 111 | + * the composed text within the <code>text</code> of the | |
| 112 | + * preceding <code>INPUT_METHOD_TEXT_CHANGED</code> event otherwise. | |
| 113 | + * <p>Note that passing in an invalid <code>id</code> results in | |
| 114 | + * unspecified behavior. This method throws an | |
| 115 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 116 | + * is <code>null</code>. | |
| 117 | + * | |
| 118 | + * @param source the object where the event originated | |
| 119 | + * @param id the event type | |
| 120 | + * @param when a long integer that specifies the time the event occurred | |
| 121 | + * @param text the combined committed and composed text, | |
| 122 | + * committed text first; must be <code>null</code> | |
| 123 | + * when the event type is <code>CARET_POSITION_CHANGED</code>; | |
| 124 | + * may be <code>null</code> for | |
| 125 | + * <code>INPUT_METHOD_TEXT_CHANGED</code> if there's no | |
| 126 | + * committed or composed text | |
| 127 | + * @param committedCharacterCount the number of committed | |
| 128 | + * characters in the text | |
| 129 | + * @param caret the caret (a.k.a. insertion point); | |
| 130 | + * <code>null</code> if there's no caret within current | |
| 131 | + * composed text | |
| 132 | + * @param visiblePosition the position that's most important | |
| 133 | + * to be visible; <code>null</code> if there's no | |
| 134 | + * recommendation for a visible position within current | |
| 135 | + * composed text | |
| 136 | + * @throws IllegalArgumentException if <code>id</code> is not | |
| 137 | + * in the range | |
| 138 | + * <code>INPUT_METHOD_FIRST</code>..<code>INPUT_METHOD_LAST</code>; | |
| 139 | + * or if id is <code>CARET_POSITION_CHANGED</code> and | |
| 140 | + * <code>text</code> is not <code>null</code>; | |
| 141 | + * or if <code>committedCharacterCount</code> is not in the range | |
| 142 | + * <code>0</code>..<code>(text.getEndIndex() - text.getBeginIndex())</code> | |
| 143 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 144 | + * | |
| 145 | + * @since 1.4 | |
| 146 | + */ | |
| 147 | + public InputMethodEvent(Component source, int id, long when, | |
| 148 | + AttributedCharacterIterator text, int committedCharacterCount, | |
| 149 | + TextHitInfo caret, TextHitInfo visiblePosition) { | |
| 150 | + super(source, id); | |
| 151 | + if (id < INPUT_METHOD_FIRST || id > INPUT_METHOD_LAST) { | |
| 152 | + throw new IllegalArgumentException("id outside of valid range"); | |
| 153 | + } | |
| 154 | + | |
| 155 | + if (id == CARET_POSITION_CHANGED && text != null) { | |
| 156 | + throw new IllegalArgumentException("text must be null for CARET_POSITION_CHANGED"); | |
| 157 | + } | |
| 158 | + | |
| 159 | + this.when = when; | |
| 160 | + this.text = text; | |
| 161 | + int textLength = 0; | |
| 162 | + if (text != null) { | |
| 163 | + textLength = text.getEndIndex() - text.getBeginIndex(); | |
| 164 | + } | |
| 165 | + | |
| 166 | + if (committedCharacterCount < 0 || committedCharacterCount > textLength) { | |
| 167 | + throw new IllegalArgumentException("committedCharacterCount outside of valid range"); | |
| 168 | + } | |
| 169 | + this.committedCharacterCount = committedCharacterCount; | |
| 170 | + | |
| 171 | + this.caret = caret; | |
| 172 | + this.visiblePosition = visiblePosition; | |
| 173 | + } | |
| 174 | + | |
| 175 | + /** | |
| 176 | + * Constructs an <code>InputMethodEvent</code> with the specified | |
| 177 | + * source component, type, text, caret, and visiblePosition. | |
| 178 | + * <p> | |
| 179 | + * The offsets of caret and visiblePosition are relative to the current | |
| 180 | + * composed text; that is, the composed text within <code>text</code> | |
| 181 | + * if this is an <code>INPUT_METHOD_TEXT_CHANGED</code> event, | |
| 182 | + * the composed text within the <code>text</code> of the | |
| 183 | + * preceding <code>INPUT_METHOD_TEXT_CHANGED</code> event otherwise. | |
| 184 | + * The time stamp for this event is initialized by invoking | |
| 185 | + * {@link java.awt.EventQueue#getMostRecentEventTime()}. | |
| 186 | + * <p>Note that passing in an invalid <code>id</code> results in | |
| 187 | + * unspecified behavior. This method throws an | |
| 188 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 189 | + * is <code>null</code>. | |
| 190 | + * | |
| 191 | + * @param source the object where the event originated | |
| 192 | + * @param id the event type | |
| 193 | + * @param text the combined committed and composed text, | |
| 194 | + * committed text first; must be <code>null</code> | |
| 195 | + * when the event type is <code>CARET_POSITION_CHANGED</code>; | |
| 196 | + * may be <code>null</code> for | |
| 197 | + * <code>INPUT_METHOD_TEXT_CHANGED</code> if there's no | |
| 198 | + * committed or composed text | |
| 199 | + * @param committedCharacterCount the number of committed | |
| 200 | + * characters in the text | |
| 201 | + * @param caret the caret (a.k.a. insertion point); | |
| 202 | + * <code>null</code> if there's no caret within current | |
| 203 | + * composed text | |
| 204 | + * @param visiblePosition the position that's most important | |
| 205 | + * to be visible; <code>null</code> if there's no | |
| 206 | + * recommendation for a visible position within current | |
| 207 | + * composed text | |
| 208 | + * @throws IllegalArgumentException if <code>id</code> is not | |
| 209 | + * in the range | |
| 210 | + * <code>INPUT_METHOD_FIRST</code>..<code>INPUT_METHOD_LAST</code>; | |
| 211 | + * or if id is <code>CARET_POSITION_CHANGED</code> and | |
| 212 | + * <code>text</code> is not <code>null</code>; | |
| 213 | + * or if <code>committedCharacterCount</code> is not in the range | |
| 214 | + * <code>0</code>..<code>(text.getEndIndex() - text.getBeginIndex())</code> | |
| 215 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 216 | + */ | |
| 217 | + public InputMethodEvent(Component source, int id, | |
| 218 | + AttributedCharacterIterator text, int committedCharacterCount, | |
| 219 | + TextHitInfo caret, TextHitInfo visiblePosition) { | |
| 220 | + this(source, id, EventQueue.getMostRecentEventTime(), text, | |
| 221 | + committedCharacterCount, caret, visiblePosition); | |
| 222 | + } | |
| 223 | + | |
| 224 | + /** | |
| 225 | + * Constructs an <code>InputMethodEvent</code> with the | |
| 226 | + * specified source component, type, caret, and visiblePosition. | |
| 227 | + * The text is set to <code>null</code>, | |
| 228 | + * <code>committedCharacterCount</code> to 0. | |
| 229 | + * <p> | |
| 230 | + * The offsets of <code>caret</code> and <code>visiblePosition</code> | |
| 231 | + * are relative to the current composed text; that is, | |
| 232 | + * the composed text within the <code>text</code> of the | |
| 233 | + * preceding <code>INPUT_METHOD_TEXT_CHANGED</code> event if the | |
| 234 | + * event being constructed as a <code>CARET_POSITION_CHANGED</code> event. | |
| 235 | + * For an <code>INPUT_METHOD_TEXT_CHANGED</code> event without text, | |
| 236 | + * <code>caret</code> and <code>visiblePosition</code> must be | |
| 237 | + * <code>null</code>. | |
| 238 | + * The time stamp for this event is initialized by invoking | |
| 239 | + * {@link java.awt.EventQueue#getMostRecentEventTime()}. | |
| 240 | + * <p>Note that passing in an invalid <code>id</code> results in | |
| 241 | + * unspecified behavior. This method throws an | |
| 242 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 243 | + * is <code>null</code>. | |
| 244 | + * | |
| 245 | + * @param source the object where the event originated | |
| 246 | + * @param id the event type | |
| 247 | + * @param caret the caret (a.k.a. insertion point); | |
| 248 | + * <code>null</code> if there's no caret within current | |
| 249 | + * composed text | |
| 250 | + * @param visiblePosition the position that's most important | |
| 251 | + * to be visible; <code>null</code> if there's no | |
| 252 | + * recommendation for a visible position within current | |
| 253 | + * composed text | |
| 254 | + * @throws IllegalArgumentException if <code>id</code> is not | |
| 255 | + * in the range | |
| 256 | + * <code>INPUT_METHOD_FIRST</code>..<code>INPUT_METHOD_LAST</code> | |
| 257 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 258 | + */ | |
| 259 | + public InputMethodEvent(Component source, int id, TextHitInfo caret, | |
| 260 | + TextHitInfo visiblePosition) { | |
| 261 | + this(source, id, EventQueue.getMostRecentEventTime(), null, | |
| 262 | + 0, caret, visiblePosition); | |
| 263 | + } | |
| 264 | + | |
| 265 | + /** | |
| 266 | + * Gets the combined committed and composed text. | |
| 267 | + * Characters from index 0 to index <code>getCommittedCharacterCount() - 1</code> are committed | |
| 268 | + * text, the remaining characters are composed text. | |
| 269 | + * | |
| 270 | + * @return the text. | |
| 271 | + * Always null for CARET_POSITION_CHANGED; | |
| 272 | + * may be null for INPUT_METHOD_TEXT_CHANGED if there's no composed or committed text. | |
| 273 | + */ | |
| 274 | + public AttributedCharacterIterator getText() { | |
| 275 | + return text; | |
| 276 | + } | |
| 277 | + | |
| 278 | + /** | |
| 279 | + * Gets the number of committed characters in the text. | |
| 280 | + */ | |
| 281 | + public int getCommittedCharacterCount() { | |
| 282 | + return committedCharacterCount; | |
| 283 | + } | |
| 284 | + | |
| 285 | + /** | |
| 286 | + * Gets the caret. | |
| 287 | + * <p> | |
| 288 | + * The offset of the caret is relative to the current | |
| 289 | + * composed text; that is, the composed text within getText() | |
| 290 | + * if this is an <code>INPUT_METHOD_TEXT_CHANGED</code> event, | |
| 291 | + * the composed text within getText() of the | |
| 292 | + * preceding <code>INPUT_METHOD_TEXT_CHANGED</code> event otherwise. | |
| 293 | + * | |
| 294 | + * @return the caret (a.k.a. insertion point). | |
| 295 | + * Null if there's no caret within current composed text. | |
| 296 | + */ | |
| 297 | + public TextHitInfo getCaret() { | |
| 298 | + return caret; | |
| 299 | + } | |
| 300 | + | |
| 301 | + /** | |
| 302 | + * Gets the position that's most important to be visible. | |
| 303 | + * <p> | |
| 304 | + * The offset of the visible position is relative to the current | |
| 305 | + * composed text; that is, the composed text within getText() | |
| 306 | + * if this is an <code>INPUT_METHOD_TEXT_CHANGED</code> event, | |
| 307 | + * the composed text within getText() of the | |
| 308 | + * preceding <code>INPUT_METHOD_TEXT_CHANGED</code> event otherwise. | |
| 309 | + * | |
| 310 | + * @return the position that's most important to be visible. | |
| 311 | + * Null if there's no recommendation for a visible position within current composed text. | |
| 312 | + */ | |
| 313 | + public TextHitInfo getVisiblePosition() { | |
| 314 | + return visiblePosition; | |
| 315 | + } | |
| 316 | + | |
| 317 | + /** | |
| 318 | + * Consumes this event so that it will not be processed | |
| 319 | + * in the default manner by the source which originated it. | |
| 320 | + */ | |
| 321 | + public void consume() { | |
| 322 | + consumed = true; | |
| 323 | + } | |
| 324 | + | |
| 325 | + /** | |
| 326 | + * Returns whether or not this event has been consumed. | |
| 327 | + * @see #consume | |
| 328 | + */ | |
| 329 | + public boolean isConsumed() { | |
| 330 | + return consumed; | |
| 331 | + } | |
| 332 | + | |
| 333 | + /** | |
| 334 | + * Returns the time stamp of when this event occurred. | |
| 335 | + * | |
| 336 | + * @return this event's timestamp | |
| 337 | + * @since 1.4 | |
| 338 | + */ | |
| 339 | + public long getWhen() { | |
| 340 | + return when; | |
| 341 | + } | |
| 342 | + | |
| 343 | + /** | |
| 344 | + * Returns a parameter string identifying this event. | |
| 345 | + * This method is useful for event-logging and for debugging. | |
| 346 | + * It contains the event ID in text form, the characters of the | |
| 347 | + * committed and composed text | |
| 348 | + * separated by "+", the number of committed characters, | |
| 349 | + * the caret, and the visible position. | |
| 350 | + * | |
| 351 | + * @return a string identifying the event and its attributes | |
| 352 | + */ | |
| 353 | + public String paramString() { | |
| 354 | + String typeStr; | |
| 355 | + switch(id) { | |
| 356 | + case INPUT_METHOD_TEXT_CHANGED: | |
| 357 | + typeStr = "INPUT_METHOD_TEXT_CHANGED"; | |
| 358 | + break; | |
| 359 | + case CARET_POSITION_CHANGED: | |
| 360 | + typeStr = "CARET_POSITION_CHANGED"; | |
| 361 | + break; | |
| 362 | + default: | |
| 363 | + typeStr = "unknown type"; | |
| 364 | + } | |
| 365 | + | |
| 366 | + String textString; | |
| 367 | + if (text == null) { | |
| 368 | + textString = "no text"; | |
| 369 | + } else { | |
| 370 | + StringBuilder textBuffer = new StringBuilder("\""); | |
| 371 | + int committedCharacterCount = this.committedCharacterCount; | |
| 372 | + char c = text.first(); | |
| 373 | + while (committedCharacterCount-- > 0) { | |
| 374 | + textBuffer.append(c); | |
| 375 | + c = text.next(); | |
| 376 | + } | |
| 377 | + textBuffer.append("\" + \""); | |
| 378 | + while (c != CharacterIterator.DONE) { | |
| 379 | + textBuffer.append(c); | |
| 380 | + c = text.next(); | |
| 381 | + } | |
| 382 | + textBuffer.append("\""); | |
| 383 | + textString = textBuffer.toString(); | |
| 384 | + } | |
| 385 | + | |
| 386 | + String countString = committedCharacterCount + " characters committed"; | |
| 387 | + | |
| 388 | + String caretString; | |
| 389 | + if (caret == null) { | |
| 390 | + caretString = "no caret"; | |
| 391 | + } else { | |
| 392 | + caretString = "caret: " + caret.toString(); | |
| 393 | + } | |
| 394 | + | |
| 395 | + String visiblePositionString; | |
| 396 | + if (visiblePosition == null) { | |
| 397 | + visiblePositionString = "no visible position"; | |
| 398 | + } else { | |
| 399 | + visiblePositionString = "visible position: " + visiblePosition.toString(); | |
| 400 | + } | |
| 401 | + | |
| 402 | + return typeStr + ", " + textString + ", " + countString + ", " + caretString + ", " + visiblePositionString; | |
| 403 | + } | |
| 404 | + | |
| 405 | + /** | |
| 406 | + * Initializes the <code>when</code> field if it is not present in the | |
| 407 | + * object input stream. In that case, the field will be initialized by | |
| 408 | + * invoking {@link java.awt.EventQueue#getMostRecentEventTime()}. | |
| 409 | + */ | |
| 410 | + private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException { | |
| 411 | + s.defaultReadObject(); | |
| 412 | + if (when == 0) { | |
| 413 | + when = EventQueue.getMostRecentEventTime(); | |
| 414 | + } | |
| 415 | + } | |
| 416 | +} | |
Binary file not shown.
| @@ -0,0 +1,56 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1997, 1999, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListener; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * The listener interface for receiving input method events. A text editing | |
| 32 | + * component has to install an input method event listener in order to work | |
| 33 | + * with input methods. | |
| 34 | + * | |
| 35 | + * <p> | |
| 36 | + * The text editing component also has to provide an instance of InputMethodRequests. | |
| 37 | + * | |
| 38 | + * @author JavaSoft Asia/Pacific | |
| 39 | + * @see InputMethodEvent | |
| 40 | + * @see java.awt.im.InputMethodRequests | |
| 41 | + * @since 1.2 | |
| 42 | + */ | |
| 43 | + | |
| 44 | +public interface InputMethodListener extends EventListener { | |
| 45 | + | |
| 46 | + /** | |
| 47 | + * Invoked when the text entered through an input method has changed. | |
| 48 | + */ | |
| 49 | + void inputMethodTextChanged(InputMethodEvent event); | |
| 50 | + | |
| 51 | + /** | |
| 52 | + * Invoked when the caret within composed text has changed. | |
| 53 | + */ | |
| 54 | + void caretPositionChanged(InputMethodEvent event); | |
| 55 | + | |
| 56 | +} | |
Binary file not shown.
| @@ -0,0 +1,351 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.awt.ActiveEvent; | |
| 29 | +import java.awt.AWTEvent; | |
| 30 | + | |
| 31 | +/** | |
| 32 | + * An event which executes the <code>run()</code> method on a <code>Runnable | |
| 33 | + * </code> when dispatched by the AWT event dispatcher thread. This class can | |
| 34 | + * be used as a reference implementation of <code>ActiveEvent</code> rather | |
| 35 | + * than declaring a new class and defining <code>dispatch()</code>.<p> | |
| 36 | + * | |
| 37 | + * Instances of this class are placed on the <code>EventQueue</code> by calls | |
| 38 | + * to <code>invokeLater</code> and <code>invokeAndWait</code>. Client code | |
| 39 | + * can use this fact to write replacement functions for <code>invokeLater | |
| 40 | + * </code> and <code>invokeAndWait</code> without writing special-case code | |
| 41 | + * in any <code>AWTEventListener</code> objects. | |
| 42 | + * <p> | |
| 43 | + * An unspecified behavior will be caused if the {@code id} parameter | |
| 44 | + * of any particular {@code InvocationEvent} instance is not | |
| 45 | + * in the range from {@code INVOCATION_FIRST} to {@code INVOCATION_LAST}. | |
| 46 | + * | |
| 47 | + * @author Fred Ecks | |
| 48 | + * @author David Mendenhall | |
| 49 | + * | |
| 50 | + * @see java.awt.ActiveEvent | |
| 51 | + * @see java.awt.EventQueue#invokeLater | |
| 52 | + * @see java.awt.EventQueue#invokeAndWait | |
| 53 | + * @see AWTEventListener | |
| 54 | + * | |
| 55 | + * @since 1.2 | |
| 56 | + */ | |
| 57 | +public class InvocationEvent extends AWTEvent implements ActiveEvent { | |
| 58 | + | |
| 59 | + /** | |
| 60 | + * Marks the first integer id for the range of invocation event ids. | |
| 61 | + */ | |
| 62 | + public static final int INVOCATION_FIRST = 1200; | |
| 63 | + | |
| 64 | + /** | |
| 65 | + * The default id for all InvocationEvents. | |
| 66 | + */ | |
| 67 | + public static final int INVOCATION_DEFAULT = INVOCATION_FIRST; | |
| 68 | + | |
| 69 | + /** | |
| 70 | + * Marks the last integer id for the range of invocation event ids. | |
| 71 | + */ | |
| 72 | + public static final int INVOCATION_LAST = INVOCATION_DEFAULT; | |
| 73 | + | |
| 74 | + /** | |
| 75 | + * The Runnable whose run() method will be called. | |
| 76 | + */ | |
| 77 | + protected Runnable runnable; | |
| 78 | + | |
| 79 | + /** | |
| 80 | + * The (potentially null) Object whose notifyAll() method will be called | |
| 81 | + * immediately after the Runnable.run() method has returned or thrown an exception. | |
| 82 | + * | |
| 83 | + * @see #isDispatched | |
| 84 | + */ | |
| 85 | + protected Object notifier; | |
| 86 | + | |
| 87 | + /** | |
| 88 | + * Indicates whether the <code>run()</code> method of the <code>runnable</code> | |
| 89 | + * was executed or not. | |
| 90 | + * | |
| 91 | + * @see #isDispatched | |
| 92 | + * @since 1.7 | |
| 93 | + */ | |
| 94 | + private volatile boolean dispatched = false; | |
| 95 | + | |
| 96 | + /** | |
| 97 | + * Set to true if dispatch() catches Throwable and stores it in the | |
| 98 | + * exception instance variable. If false, Throwables are propagated up | |
| 99 | + * to the EventDispatchThread's dispatch loop. | |
| 100 | + */ | |
| 101 | + protected boolean catchExceptions; | |
| 102 | + | |
| 103 | + /** | |
| 104 | + * The (potentially null) Exception thrown during execution of the | |
| 105 | + * Runnable.run() method. This variable will also be null if a particular | |
| 106 | + * instance does not catch exceptions. | |
| 107 | + */ | |
| 108 | + private Exception exception = null; | |
| 109 | + | |
| 110 | + /** | |
| 111 | + * The (potentially null) Throwable thrown during execution of the | |
| 112 | + * Runnable.run() method. This variable will also be null if a particular | |
| 113 | + * instance does not catch exceptions. | |
| 114 | + */ | |
| 115 | + private Throwable throwable = null; | |
| 116 | + | |
| 117 | + /** | |
| 118 | + * The timestamp of when this event occurred. | |
| 119 | + * | |
| 120 | + * @serial | |
| 121 | + * @see #getWhen | |
| 122 | + */ | |
| 123 | + private long when; | |
| 124 | + | |
| 125 | + /* | |
| 126 | + * JDK 1.1 serialVersionUID. | |
| 127 | + */ | |
| 128 | + private static final long serialVersionUID = 436056344909459450L; | |
| 129 | + | |
| 130 | + /** | |
| 131 | + * Constructs an <code>InvocationEvent</code> with the specified | |
| 132 | + * source which will execute the runnable's <code>run</code> | |
| 133 | + * method when dispatched. | |
| 134 | + * <p>This is a convenience constructor. An invocation of the form | |
| 135 | + * <tt>InvocationEvent(source, runnable)</tt> | |
| 136 | + * behaves in exactly the same way as the invocation of | |
| 137 | + * <tt>{@link #InvocationEvent(Object, Runnable, Object, boolean) InvocationEvent}(source, runnable, null, false)</tt>. | |
| 138 | + * <p> This method throws an <code>IllegalArgumentException</code> | |
| 139 | + * if <code>source</code> is <code>null</code>. | |
| 140 | + * | |
| 141 | + * @param source The <code>Object</code> that originated the event | |
| 142 | + * @param runnable The <code>Runnable</code> whose <code>run</code> | |
| 143 | + * method will be executed | |
| 144 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 145 | + * | |
| 146 | + * @see #getSource() | |
| 147 | + * @see #InvocationEvent(Object, Runnable, Object, boolean) | |
| 148 | + */ | |
| 149 | + public InvocationEvent(Object source, Runnable runnable) { | |
| 150 | + this(source, runnable, null, false); | |
| 151 | + } | |
| 152 | + | |
| 153 | + /** | |
| 154 | + * Constructs an <code>InvocationEvent</code> with the specified | |
| 155 | + * source which will execute the runnable's <code>run</code> | |
| 156 | + * method when dispatched. If notifier is non-<code>null</code>, | |
| 157 | + * <code>notifyAll()</code> will be called on it | |
| 158 | + * immediately after <code>run</code> has returned or thrown an exception. | |
| 159 | + * <p>An invocation of the form <tt>InvocationEvent(source, | |
| 160 | + * runnable, notifier, catchThrowables)</tt> | |
| 161 | + * behaves in exactly the same way as the invocation of | |
| 162 | + * <tt>{@link #InvocationEvent(Object, int, Runnable, Object, boolean) InvocationEvent}(source, InvocationEvent.INVOCATION_DEFAULT, runnable, notifier, catchThrowables)</tt>. | |
| 163 | + * <p>This method throws an <code>IllegalArgumentException</code> | |
| 164 | + * if <code>source</code> is <code>null</code>. | |
| 165 | + * | |
| 166 | + * @param source The <code>Object</code> that originated | |
| 167 | + * the event | |
| 168 | + * @param runnable The <code>Runnable</code> whose | |
| 169 | + * <code>run</code> method will be | |
| 170 | + * executed | |
| 171 | + * @param notifier The {@code Object} whose <code>notifyAll</code> | |
| 172 | + * method will be called after | |
| 173 | + * <code>Runnable.run</code> has returned or | |
| 174 | + * thrown an exception | |
| 175 | + * @param catchThrowables Specifies whether <code>dispatch</code> | |
| 176 | + * should catch Throwable when executing | |
| 177 | + * the <code>Runnable</code>'s <code>run</code> | |
| 178 | + * method, or should instead propagate those | |
| 179 | + * Throwables to the EventDispatchThread's | |
| 180 | + * dispatch loop | |
| 181 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 182 | + * | |
| 183 | + * @see #getSource() | |
| 184 | + * @see #InvocationEvent(Object, int, Runnable, Object, boolean) | |
| 185 | + */ | |
| 186 | + public InvocationEvent(Object source, Runnable runnable, Object notifier, | |
| 187 | + boolean catchThrowables) { | |
| 188 | + this(source, INVOCATION_DEFAULT, runnable, notifier, catchThrowables); | |
| 189 | + } | |
| 190 | + | |
| 191 | + /** | |
| 192 | + * Constructs an <code>InvocationEvent</code> with the specified | |
| 193 | + * source and ID which will execute the runnable's <code>run</code> | |
| 194 | + * method when dispatched. If notifier is non-<code>null</code>, | |
| 195 | + * <code>notifyAll</code> will be called on it immediately after | |
| 196 | + * <code>run</code> has returned or thrown an exception. | |
| 197 | + * <p>This method throws an | |
| 198 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 199 | + * is <code>null</code>. | |
| 200 | + * | |
| 201 | + * @param source The <code>Object</code> that originated | |
| 202 | + * the event | |
| 203 | + * @param id An integer indicating the type of event. | |
| 204 | + * For information on allowable values, see | |
| 205 | + * the class description for {@link InvocationEvent} | |
| 206 | + * @param runnable The <code>Runnable</code> whose | |
| 207 | + * <code>run</code> method will be executed | |
| 208 | + * @param notifier The <code>Object</code> whose <code>notifyAll</code> | |
| 209 | + * method will be called after | |
| 210 | + * <code>Runnable.run</code> has returned or | |
| 211 | + * thrown an exception | |
| 212 | + * @param catchThrowables Specifies whether <code>dispatch</code> | |
| 213 | + * should catch Throwable when executing the | |
| 214 | + * <code>Runnable</code>'s <code>run</code> | |
| 215 | + * method, or should instead propagate those | |
| 216 | + * Throwables to the EventDispatchThread's | |
| 217 | + * dispatch loop | |
| 218 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 219 | + * @see #getSource() | |
| 220 | + * @see #getID() | |
| 221 | + */ | |
| 222 | + protected InvocationEvent(Object source, int id, Runnable runnable, | |
| 223 | + Object notifier, boolean catchThrowables) { | |
| 224 | + super(source, id); | |
| 225 | + this.runnable = runnable; | |
| 226 | + this.notifier = notifier; | |
| 227 | + this.catchExceptions = catchThrowables; | |
| 228 | + this.when = System.currentTimeMillis(); | |
| 229 | + } | |
| 230 | + | |
| 231 | + /** | |
| 232 | + * Executes the Runnable's <code>run()</code> method and notifies the | |
| 233 | + * notifier (if any) when <code>run()</code> has returned or thrown an exception. | |
| 234 | + * | |
| 235 | + * @see #isDispatched | |
| 236 | + */ | |
| 237 | + public void dispatch() { | |
| 238 | + try { | |
| 239 | + if (catchExceptions) { | |
| 240 | + try { | |
| 241 | + runnable.run(); | |
| 242 | + } | |
| 243 | + catch (Throwable t) { | |
| 244 | + if (t instanceof Exception) { | |
| 245 | + exception = (Exception) t; | |
| 246 | + } | |
| 247 | + throwable = t; | |
| 248 | + } | |
| 249 | + } | |
| 250 | + else { | |
| 251 | + runnable.run(); | |
| 252 | + } | |
| 253 | + } finally { | |
| 254 | + dispatched = true; | |
| 255 | + | |
| 256 | + if (notifier != null) { | |
| 257 | + synchronized (notifier) { | |
| 258 | + notifier.notifyAll(); | |
| 259 | + } | |
| 260 | + } | |
| 261 | + } | |
| 262 | + } | |
| 263 | + | |
| 264 | + /** | |
| 265 | + * Returns any Exception caught while executing the Runnable's <code>run() | |
| 266 | + * </code> method. | |
| 267 | + * | |
| 268 | + * @return A reference to the Exception if one was thrown; null if no | |
| 269 | + * Exception was thrown or if this InvocationEvent does not | |
| 270 | + * catch exceptions | |
| 271 | + */ | |
| 272 | + public Exception getException() { | |
| 273 | + return (catchExceptions) ? exception : null; | |
| 274 | + } | |
| 275 | + | |
| 276 | + /** | |
| 277 | + * Returns any Throwable caught while executing the Runnable's <code>run() | |
| 278 | + * </code> method. | |
| 279 | + * | |
| 280 | + * @return A reference to the Throwable if one was thrown; null if no | |
| 281 | + * Throwable was thrown or if this InvocationEvent does not | |
| 282 | + * catch Throwables | |
| 283 | + * @since 1.5 | |
| 284 | + */ | |
| 285 | + public Throwable getThrowable() { | |
| 286 | + return (catchExceptions) ? throwable : null; | |
| 287 | + } | |
| 288 | + | |
| 289 | + /** | |
| 290 | + * Returns the timestamp of when this event occurred. | |
| 291 | + * | |
| 292 | + * @return this event's timestamp | |
| 293 | + * @since 1.4 | |
| 294 | + */ | |
| 295 | + public long getWhen() { | |
| 296 | + return when; | |
| 297 | + } | |
| 298 | + | |
| 299 | + /** | |
| 300 | + * Returns {@code true} if the event is dispatched or any exception is | |
| 301 | + * thrown while dispatching, {@code false} otherwise. The method should | |
| 302 | + * be called by a waiting thread that calls the {@code notifier.wait()} method. | |
| 303 | + * Since spurious wakeups are possible (as explained in {@link Object#wait()}), | |
| 304 | + * this method should be used in a waiting loop to ensure that the event | |
| 305 | + * got dispatched: | |
| 306 | + * <pre> | |
| 307 | + * while (!event.isDispatched()) { | |
| 308 | + * notifier.wait(); | |
| 309 | + * } | |
| 310 | + * </pre> | |
| 311 | + * If the waiting thread wakes up without dispatching the event, | |
| 312 | + * the {@code isDispatched()} method returns {@code false}, and | |
| 313 | + * the {@code while} loop executes once more, thus, causing | |
| 314 | + * the awakened thread to revert to the waiting mode. | |
| 315 | + * <p> | |
| 316 | + * If the {@code notifier.notifyAll()} happens before the waiting thread | |
| 317 | + * enters the {@code notifier.wait()} method, the {@code while} loop ensures | |
| 318 | + * that the waiting thread will not enter the {@code notifier.wait()} method. | |
| 319 | + * Otherwise, there is no guarantee that the waiting thread will ever be woken | |
| 320 | + * from the wait. | |
| 321 | + * | |
| 322 | + * @return {@code true} if the event has been dispatched, or any exception | |
| 323 | + * has been thrown while dispatching, {@code false} otherwise | |
| 324 | + * @see #dispatch | |
| 325 | + * @see #notifier | |
| 326 | + * @see #catchExceptions | |
| 327 | + * @since 1.7 | |
| 328 | + */ | |
| 329 | + public boolean isDispatched() { | |
| 330 | + return dispatched; | |
| 331 | + } | |
| 332 | + | |
| 333 | + /** | |
| 334 | + * Returns a parameter string identifying this event. | |
| 335 | + * This method is useful for event-logging and for debugging. | |
| 336 | + * | |
| 337 | + * @return A string identifying the event and its attributes | |
| 338 | + */ | |
| 339 | + public String paramString() { | |
| 340 | + String typeStr; | |
| 341 | + switch(id) { | |
| 342 | + case INVOCATION_DEFAULT: | |
| 343 | + typeStr = "INVOCATION_DEFAULT"; | |
| 344 | + break; | |
| 345 | + default: | |
| 346 | + typeStr = "unknown type"; | |
| 347 | + } | |
| 348 | + return typeStr + ",runnable=" + runnable + ",notifier=" + notifier + | |
| 349 | + ",catchExceptions=" + catchExceptions + ",when=" + when; | |
| 350 | + } | |
| 351 | +} | |
Binary file not shown.
| @@ -0,0 +1,202 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.awt.AWTEvent; | |
| 29 | +import java.awt.ItemSelectable; | |
| 30 | + | |
| 31 | +/** | |
| 32 | + * A semantic event which indicates that an item was selected or deselected. | |
| 33 | + * This high-level event is generated by an ItemSelectable object (such as a | |
| 34 | + * List) when an item is selected or deselected by the user. | |
| 35 | + * The event is passed to every <code>ItemListener</code> object which | |
| 36 | + * registered to receive such events using the component's | |
| 37 | + * <code>addItemListener</code> method. | |
| 38 | + * <P> | |
| 39 | + * The object that implements the <code>ItemListener</code> interface gets | |
| 40 | + * this <code>ItemEvent</code> when the event occurs. The listener is | |
| 41 | + * spared the details of processing individual mouse movements and mouse | |
| 42 | + * clicks, and can instead process a "meaningful" (semantic) event like | |
| 43 | + * "item selected" or "item deselected". | |
| 44 | + * <p> | |
| 45 | + * An unspecified behavior will be caused if the {@code id} parameter | |
| 46 | + * of any particular {@code ItemEvent} instance is not | |
| 47 | + * in the range from {@code ITEM_FIRST} to {@code ITEM_LAST}. | |
| 48 | + * <p> | |
| 49 | + * The {@code stateChange} of any {@code ItemEvent} instance takes one of the following | |
| 50 | + * values: | |
| 51 | + * <ul> | |
| 52 | + * <li> {@code ItemEvent.SELECTED} | |
| 53 | + * <li> {@code ItemEvent.DESELECTED} | |
| 54 | + * </ul> | |
| 55 | + * Assigning the value different from listed above will cause an unspecified behavior. | |
| 56 | + * | |
| 57 | + * @author Carl Quinn | |
| 58 | + * | |
| 59 | + * @see java.awt.ItemSelectable | |
| 60 | + * @see ItemListener | |
| 61 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/itemlistener.html">Tutorial: Writing an Item Listener</a> | |
| 62 | + * | |
| 63 | + * @since 1.1 | |
| 64 | + */ | |
| 65 | +public class ItemEvent extends AWTEvent { | |
| 66 | + | |
| 67 | + /** | |
| 68 | + * The first number in the range of ids used for item events. | |
| 69 | + */ | |
| 70 | + public static final int ITEM_FIRST = 701; | |
| 71 | + | |
| 72 | + /** | |
| 73 | + * The last number in the range of ids used for item events. | |
| 74 | + */ | |
| 75 | + public static final int ITEM_LAST = 701; | |
| 76 | + | |
| 77 | + /** | |
| 78 | + * This event id indicates that an item's state changed. | |
| 79 | + */ | |
| 80 | + public static final int ITEM_STATE_CHANGED = ITEM_FIRST; //Event.LIST_SELECT | |
| 81 | + | |
| 82 | + /** | |
| 83 | + * This state-change value indicates that an item was selected. | |
| 84 | + */ | |
| 85 | + public static final int SELECTED = 1; | |
| 86 | + | |
| 87 | + /** | |
| 88 | + * This state-change-value indicates that a selected item was deselected. | |
| 89 | + */ | |
| 90 | + public static final int DESELECTED = 2; | |
| 91 | + | |
| 92 | + /** | |
| 93 | + * The item whose selection state has changed. | |
| 94 | + * | |
| 95 | + * @serial | |
| 96 | + * @see #getItem() | |
| 97 | + */ | |
| 98 | + Object item; | |
| 99 | + | |
| 100 | + /** | |
| 101 | + * <code>stateChange</code> indicates whether the <code>item</code> | |
| 102 | + * was selected or deselected. | |
| 103 | + * | |
| 104 | + * @serial | |
| 105 | + * @see #getStateChange() | |
| 106 | + */ | |
| 107 | + int stateChange; | |
| 108 | + | |
| 109 | + /* | |
| 110 | + * JDK 1.1 serialVersionUID | |
| 111 | + */ | |
| 112 | + private static final long serialVersionUID = -608708132447206933L; | |
| 113 | + | |
| 114 | + /** | |
| 115 | + * Constructs an <code>ItemEvent</code> object. | |
| 116 | + * <p> This method throws an | |
| 117 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 118 | + * is <code>null</code>. | |
| 119 | + * | |
| 120 | + * @param source The <code>ItemSelectable</code> object | |
| 121 | + * that originated the event | |
| 122 | + * @param id The integer that identifies the event type. | |
| 123 | + * For information on allowable values, see | |
| 124 | + * the class description for {@link ItemEvent} | |
| 125 | + * @param item An object -- the item affected by the event | |
| 126 | + * @param stateChange An integer that indicates whether the item was | |
| 127 | + * selected or deselected. | |
| 128 | + * For information on allowable values, see | |
| 129 | + * the class description for {@link ItemEvent} | |
| 130 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 131 | + * @see #getItemSelectable() | |
| 132 | + * @see #getID() | |
| 133 | + * @see #getStateChange() | |
| 134 | + */ | |
| 135 | + public ItemEvent(ItemSelectable source, int id, Object item, int stateChange) { | |
| 136 | + super(source, id); | |
| 137 | + this.item = item; | |
| 138 | + this.stateChange = stateChange; | |
| 139 | + } | |
| 140 | + | |
| 141 | + /** | |
| 142 | + * Returns the originator of the event. | |
| 143 | + * | |
| 144 | + * @return the ItemSelectable object that originated the event. | |
| 145 | + */ | |
| 146 | + public ItemSelectable getItemSelectable() { | |
| 147 | + return (ItemSelectable)source; | |
| 148 | + } | |
| 149 | + | |
| 150 | + /** | |
| 151 | + * Returns the item affected by the event. | |
| 152 | + * | |
| 153 | + * @return the item (object) that was affected by the event | |
| 154 | + */ | |
| 155 | + public Object getItem() { | |
| 156 | + return item; | |
| 157 | + } | |
| 158 | + | |
| 159 | + /** | |
| 160 | + * Returns the type of state change (selected or deselected). | |
| 161 | + * | |
| 162 | + * @return an integer that indicates whether the item was selected | |
| 163 | + * or deselected | |
| 164 | + * | |
| 165 | + * @see #SELECTED | |
| 166 | + * @see #DESELECTED | |
| 167 | + */ | |
| 168 | + public int getStateChange() { | |
| 169 | + return stateChange; | |
| 170 | + } | |
| 171 | + | |
| 172 | + /** | |
| 173 | + * Returns a parameter string identifying this item event. | |
| 174 | + * This method is useful for event-logging and for debugging. | |
| 175 | + * | |
| 176 | + * @return a string identifying the event and its attributes | |
| 177 | + */ | |
| 178 | + public String paramString() { | |
| 179 | + String typeStr; | |
| 180 | + switch(id) { | |
| 181 | + case ITEM_STATE_CHANGED: | |
| 182 | + typeStr = "ITEM_STATE_CHANGED"; | |
| 183 | + break; | |
| 184 | + default: | |
| 185 | + typeStr = "unknown type"; | |
| 186 | + } | |
| 187 | + | |
| 188 | + String stateStr; | |
| 189 | + switch(stateChange) { | |
| 190 | + case SELECTED: | |
| 191 | + stateStr = "SELECTED"; | |
| 192 | + break; | |
| 193 | + case DESELECTED: | |
| 194 | + stateStr = "DESELECTED"; | |
| 195 | + break; | |
| 196 | + default: | |
| 197 | + stateStr = "unknown type"; | |
| 198 | + } | |
| 199 | + return typeStr + ",item="+item + ",stateChange="+stateStr; | |
| 200 | + } | |
| 201 | + | |
| 202 | +} | |
Binary file not shown.
| @@ -0,0 +1,56 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListener; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * The listener interface for receiving item events. | |
| 32 | + * The class that is interested in processing an item event | |
| 33 | + * implements this interface. The object created with that | |
| 34 | + * class is then registered with a component using the | |
| 35 | + * component's <code>addItemListener</code> method. When an | |
| 36 | + * item-selection event occurs, the listener object's | |
| 37 | + * <code>itemStateChanged</code> method is invoked. | |
| 38 | + * | |
| 39 | + * @author Amy Fowler | |
| 40 | + * | |
| 41 | + * @see java.awt.ItemSelectable | |
| 42 | + * @see ItemEvent | |
| 43 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/itemlistener.html">Tutorial: Writing an Item Listener</a> | |
| 44 | + * | |
| 45 | + * @since 1.1 | |
| 46 | + */ | |
| 47 | +public interface ItemListener extends EventListener { | |
| 48 | + | |
| 49 | + /** | |
| 50 | + * Invoked when an item has been selected or deselected by the user. | |
| 51 | + * The code written for this method performs the operations | |
| 52 | + * that need to occur when an item is selected (or deselected). | |
| 53 | + */ | |
| 54 | + void itemStateChanged(ItemEvent e); | |
| 55 | + | |
| 56 | +} | |
Binary file not shown.
| @@ -0,0 +1,69 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +/** | |
| 29 | + * An abstract adapter class for receiving keyboard events. | |
| 30 | + * The methods in this class are empty. This class exists as | |
| 31 | + * convenience for creating listener objects. | |
| 32 | + * <P> | |
| 33 | + * Extend this class to create a <code>KeyEvent</code> listener | |
| 34 | + * and override the methods for the events of interest. (If you implement the | |
| 35 | + * <code>KeyListener</code> interface, you have to define all of | |
| 36 | + * the methods in it. This abstract class defines null methods for them | |
| 37 | + * all, so you can only have to define methods for events you care about.) | |
| 38 | + * <P> | |
| 39 | + * Create a listener object using the extended class and then register it with | |
| 40 | + * a component using the component's <code>addKeyListener</code> | |
| 41 | + * method. When a key is pressed, released, or typed, | |
| 42 | + * the relevant method in the listener object is invoked, | |
| 43 | + * and the <code>KeyEvent</code> is passed to it. | |
| 44 | + * | |
| 45 | + * @author Carl Quinn | |
| 46 | + * | |
| 47 | + * @see KeyEvent | |
| 48 | + * @see KeyListener | |
| 49 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/keylistener.html">Tutorial: Writing a Key Listener</a> | |
| 50 | + * | |
| 51 | + * @since 1.1 | |
| 52 | + */ | |
| 53 | +public abstract class KeyAdapter implements KeyListener { | |
| 54 | + /** | |
| 55 | + * Invoked when a key has been typed. | |
| 56 | + * This event occurs when a key press is followed by a key release. | |
| 57 | + */ | |
| 58 | + public void keyTyped(KeyEvent e) {} | |
| 59 | + | |
| 60 | + /** | |
| 61 | + * Invoked when a key has been pressed. | |
| 62 | + */ | |
| 63 | + public void keyPressed(KeyEvent e) {} | |
| 64 | + | |
| 65 | + /** | |
| 66 | + * Invoked when a key has been released. | |
| 67 | + */ | |
| 68 | + public void keyReleased(KeyEvent e) {} | |
| 69 | +} | |
Binary file not shown.
| @@ -0,0 +1,1669 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2009, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.awt.Event; | |
| 29 | +import java.awt.Component; | |
| 30 | +import java.awt.GraphicsEnvironment; | |
| 31 | +import java.awt.Toolkit; | |
| 32 | +import java.io.IOException; | |
| 33 | +import java.io.ObjectInputStream; | |
| 34 | + | |
| 35 | +/** | |
| 36 | + * An event which indicates that a keystroke occurred in a component. | |
| 37 | + * <p> | |
| 38 | + * This low-level event is generated by a component object (such as a text | |
| 39 | + * field) when a key is pressed, released, or typed. | |
| 40 | + * The event is passed to every <code>KeyListener</code> | |
| 41 | + * or <code>KeyAdapter</code> object which registered to receive such | |
| 42 | + * events using the component's <code>addKeyListener</code> method. | |
| 43 | + * (<code>KeyAdapter</code> objects implement the | |
| 44 | + * <code>KeyListener</code> interface.) Each such listener object | |
| 45 | + * gets this <code>KeyEvent</code> when the event occurs. | |
| 46 | + * <p> | |
| 47 | + * <em>"Key typed" events</em> are higher-level and generally do not depend on | |
| 48 | + * the platform or keyboard layout. They are generated when a Unicode character | |
| 49 | + * is entered, and are the preferred way to find out about character input. | |
| 50 | + * In the simplest case, a key typed event is produced by a single key press | |
| 51 | + * (e.g., 'a'). Often, however, characters are produced by series of key | |
| 52 | + * presses (e.g., 'shift' + 'a'), and the mapping from key pressed events to | |
| 53 | + * key typed events may be many-to-one or many-to-many. Key releases are not | |
| 54 | + * usually necessary to generate a key typed event, but there are some cases | |
| 55 | + * where the key typed event is not generated until a key is released (e.g., | |
| 56 | + * entering ASCII sequences via the Alt-Numpad method in Windows). | |
| 57 | + * No key typed events are generated for keys that don't generate Unicode | |
| 58 | + * characters (e.g., action keys, modifier keys, etc.). | |
| 59 | + * <p> | |
| 60 | + * The getKeyChar method always returns a valid Unicode character or | |
| 61 | + * CHAR_UNDEFINED. Character input is reported by KEY_TYPED events: | |
| 62 | + * KEY_PRESSED and KEY_RELEASED events are not necessarily associated | |
| 63 | + * with character input. Therefore, the result of the getKeyChar method | |
| 64 | + * is guaranteed to be meaningful only for KEY_TYPED events. | |
| 65 | + * <p> | |
| 66 | + * For key pressed and key released events, the getKeyCode method returns | |
| 67 | + * the event's keyCode. For key typed events, the getKeyCode method | |
| 68 | + * always returns {@code VK_UNDEFINED}. The {@code getExtendedKeyCode} method | |
| 69 | + * may also be used with many international keyboard layouts. | |
| 70 | + * | |
| 71 | + * <p> | |
| 72 | + * <em>"Key pressed" and "key released" events</em> are lower-level and depend | |
| 73 | + * on the platform and keyboard layout. They are generated whenever a key is | |
| 74 | + * pressed or released, and are the only way to find out about keys that don't | |
| 75 | + * generate character input (e.g., action keys, modifier keys, etc.). The key | |
| 76 | + * being pressed or released is indicated by the {@code getKeyCode} and {@code getExtendedKeyCode} | |
| 77 | + * methods, which return a virtual key code. | |
| 78 | + * | |
| 79 | + * <p> | |
| 80 | + * <em>Virtual key codes</em> are used to report which keyboard key has | |
| 81 | + * been pressed, rather than a character generated by the combination | |
| 82 | + * of one or more keystrokes (such as "A", which comes from shift and "a"). | |
| 83 | + * | |
| 84 | + * <p> | |
| 85 | + * For example, pressing the Shift key will cause a KEY_PRESSED event | |
| 86 | + * with a VK_SHIFT keyCode, while pressing the 'a' key will result in | |
| 87 | + * a VK_A keyCode. After the 'a' key is released, a KEY_RELEASED event | |
| 88 | + * will be fired with VK_A. Separately, a KEY_TYPED event with a keyChar | |
| 89 | + * value of 'A' is generated. | |
| 90 | + * | |
| 91 | + * <p> | |
| 92 | + * Pressing and releasing a key on the keyboard results in the generating | |
| 93 | + * the following key events (in order): | |
| 94 | + * <PRE> | |
| 95 | + * {@code KEY_PRESSED} | |
| 96 | + * {@code KEY_TYPED} (is only generated if a valid Unicode character could be generated.) | |
| 97 | + * {@code KEY_RELEASED} | |
| 98 | + * </PRE> | |
| 99 | + * | |
| 100 | + * But in some cases (e.g. auto-repeat or input method is activated) the order | |
| 101 | + * could be different (and platform dependent). | |
| 102 | + * | |
| 103 | + * <p> | |
| 104 | + * Notes: | |
| 105 | + * <ul> | |
| 106 | + * <li>Key combinations which do not result in Unicode characters, such as action | |
| 107 | + * keys like F1 and the HELP key, do not generate KEY_TYPED events. | |
| 108 | + * <li>Not all keyboards or systems are capable of generating all | |
| 109 | + * virtual key codes. No attempt is made in Java to generate these keys | |
| 110 | + * artificially. | |
| 111 | + * <li>Virtual key codes do not identify a physical key: they depend on the | |
| 112 | + * platform and keyboard layout. For example, the key that generates VK_Q | |
| 113 | + * when using a U.S. keyboard layout will generate VK_A when using a French | |
| 114 | + * keyboard layout. | |
| 115 | + * <li>The key that generates {@code VK_Q} when using a U.S. keyboard layout also | |
| 116 | + * generates a unique code for Russian or Hebrew layout. There is no a | |
| 117 | + * {@code VK_} constant for these and many other codes in various layouts. These codes | |
| 118 | + * may be obtained by using {@code getExtendedKeyCode} and are used whenever | |
| 119 | + * a {@code VK_} constant is used. | |
| 120 | + * <li>Not all characters have a keycode associated with them. For example, | |
| 121 | + * there is no keycode for the question mark because there is no keyboard | |
| 122 | + * for which it appears on the primary layer. | |
| 123 | + * <li>In order to support the platform-independent handling of action keys, | |
| 124 | + * the Java platform uses a few additional virtual key constants for functions | |
| 125 | + * that would otherwise have to be recognized by interpreting virtual key codes | |
| 126 | + * and modifiers. For example, for Japanese Windows keyboards, VK_ALL_CANDIDATES | |
| 127 | + * is returned instead of VK_CONVERT with the ALT modifier. | |
| 128 | + * <li>As specified in <a href="../doc-files/FocusSpec.html">Focus Specification</a> | |
| 129 | + * key events are dispatched to the focus owner by default. | |
| 130 | + * </ul> | |
| 131 | + * | |
| 132 | + * <p> | |
| 133 | + * WARNING: Aside from those keys that are defined by the Java language | |
| 134 | + * (VK_ENTER, VK_BACK_SPACE, and VK_TAB), do not rely on the values of the VK_ | |
| 135 | + * constants. Sun reserves the right to change these values as needed | |
| 136 | + * to accomodate a wider range of keyboards in the future. | |
| 137 | + * <p> | |
| 138 | + * An unspecified behavior will be caused if the {@code id} parameter | |
| 139 | + * of any particular {@code KeyEvent} instance is not | |
| 140 | + * in the range from {@code KEY_FIRST} to {@code KEY_LAST}. | |
| 141 | + * | |
| 142 | + * @author Carl Quinn | |
| 143 | + * @author Amy Fowler | |
| 144 | + * @author Norbert Lindenberg | |
| 145 | + * | |
| 146 | + * @see KeyAdapter | |
| 147 | + * @see KeyListener | |
| 148 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/keylistener.html">Tutorial: Writing a Key Listener</a> | |
| 149 | + * | |
| 150 | + * @since 1.1 | |
| 151 | + */ | |
| 152 | +public class KeyEvent extends InputEvent { | |
| 153 | + | |
| 154 | + /** | |
| 155 | + * Stores the state of native event dispatching system | |
| 156 | + * - true, if when the event was created event proxying | |
| 157 | + * mechanism was active | |
| 158 | + * - false, if it was inactive | |
| 159 | + * Used in Component.dispatchEventImpl to correctly dispatch | |
| 160 | + * events when proxy is active | |
| 161 | + */ | |
| 162 | + private boolean isProxyActive = false; | |
| 163 | + | |
| 164 | + /** | |
| 165 | + * The first number in the range of ids used for key events. | |
| 166 | + */ | |
| 167 | + public static final int KEY_FIRST = 400; | |
| 168 | + | |
| 169 | + /** | |
| 170 | + * The last number in the range of ids used for key events. | |
| 171 | + */ | |
| 172 | + public static final int KEY_LAST = 402; | |
| 173 | + | |
| 174 | + /** | |
| 175 | + * The "key typed" event. This event is generated when a character is | |
| 176 | + * entered. In the simplest case, it is produced by a single key press. | |
| 177 | + * Often, however, characters are produced by series of key presses, and | |
| 178 | + * the mapping from key pressed events to key typed events may be | |
| 179 | + * many-to-one or many-to-many. | |
| 180 | + */ | |
| 181 | + public static final int KEY_TYPED = KEY_FIRST; | |
| 182 | + | |
| 183 | + /** | |
| 184 | + * The "key pressed" event. This event is generated when a key | |
| 185 | + * is pushed down. | |
| 186 | + */ | |
| 187 | + public static final int KEY_PRESSED = 1 + KEY_FIRST; //Event.KEY_PRESS | |
| 188 | + | |
| 189 | + /** | |
| 190 | + * The "key released" event. This event is generated when a key | |
| 191 | + * is let up. | |
| 192 | + */ | |
| 193 | + public static final int KEY_RELEASED = 2 + KEY_FIRST; //Event.KEY_RELEASE | |
| 194 | + | |
| 195 | + /* Virtual key codes. */ | |
| 196 | + | |
| 197 | + public static final int VK_ENTER = '\n'; | |
| 198 | + public static final int VK_BACK_SPACE = '\b'; | |
| 199 | + public static final int VK_TAB = '\t'; | |
| 200 | + public static final int VK_CANCEL = 0x03; | |
| 201 | + public static final int VK_CLEAR = 0x0C; | |
| 202 | + public static final int VK_SHIFT = 0x10; | |
| 203 | + public static final int VK_CONTROL = 0x11; | |
| 204 | + public static final int VK_ALT = 0x12; | |
| 205 | + public static final int VK_PAUSE = 0x13; | |
| 206 | + public static final int VK_CAPS_LOCK = 0x14; | |
| 207 | + public static final int VK_ESCAPE = 0x1B; | |
| 208 | + public static final int VK_SPACE = 0x20; | |
| 209 | + public static final int VK_PAGE_UP = 0x21; | |
| 210 | + public static final int VK_PAGE_DOWN = 0x22; | |
| 211 | + public static final int VK_END = 0x23; | |
| 212 | + public static final int VK_HOME = 0x24; | |
| 213 | + | |
| 214 | + /** | |
| 215 | + * Constant for the non-numpad <b>left</b> arrow key. | |
| 216 | + * @see #VK_KP_LEFT | |
| 217 | + */ | |
| 218 | + public static final int VK_LEFT = 0x25; | |
| 219 | + | |
| 220 | + /** | |
| 221 | + * Constant for the non-numpad <b>up</b> arrow key. | |
| 222 | + * @see #VK_KP_UP | |
| 223 | + */ | |
| 224 | + public static final int VK_UP = 0x26; | |
| 225 | + | |
| 226 | + /** | |
| 227 | + * Constant for the non-numpad <b>right</b> arrow key. | |
| 228 | + * @see #VK_KP_RIGHT | |
| 229 | + */ | |
| 230 | + public static final int VK_RIGHT = 0x27; | |
| 231 | + | |
| 232 | + /** | |
| 233 | + * Constant for the non-numpad <b>down</b> arrow key. | |
| 234 | + * @see #VK_KP_DOWN | |
| 235 | + */ | |
| 236 | + public static final int VK_DOWN = 0x28; | |
| 237 | + | |
| 238 | + /** | |
| 239 | + * Constant for the comma key, "," | |
| 240 | + */ | |
| 241 | + public static final int VK_COMMA = 0x2C; | |
| 242 | + | |
| 243 | + /** | |
| 244 | + * Constant for the minus key, "-" | |
| 245 | + * @since 1.2 | |
| 246 | + */ | |
| 247 | + public static final int VK_MINUS = 0x2D; | |
| 248 | + | |
| 249 | + /** | |
| 250 | + * Constant for the period key, "." | |
| 251 | + */ | |
| 252 | + public static final int VK_PERIOD = 0x2E; | |
| 253 | + | |
| 254 | + /** | |
| 255 | + * Constant for the forward slash key, "/" | |
| 256 | + */ | |
| 257 | + public static final int VK_SLASH = 0x2F; | |
| 258 | + | |
| 259 | + /** VK_0 thru VK_9 are the same as ASCII '0' thru '9' (0x30 - 0x39) */ | |
| 260 | + public static final int VK_0 = 0x30; | |
| 261 | + public static final int VK_1 = 0x31; | |
| 262 | + public static final int VK_2 = 0x32; | |
| 263 | + public static final int VK_3 = 0x33; | |
| 264 | + public static final int VK_4 = 0x34; | |
| 265 | + public static final int VK_5 = 0x35; | |
| 266 | + public static final int VK_6 = 0x36; | |
| 267 | + public static final int VK_7 = 0x37; | |
| 268 | + public static final int VK_8 = 0x38; | |
| 269 | + public static final int VK_9 = 0x39; | |
| 270 | + | |
| 271 | + /** | |
| 272 | + * Constant for the semicolon key, ";" | |
| 273 | + */ | |
| 274 | + public static final int VK_SEMICOLON = 0x3B; | |
| 275 | + | |
| 276 | + /** | |
| 277 | + * Constant for the equals key, "=" | |
| 278 | + */ | |
| 279 | + public static final int VK_EQUALS = 0x3D; | |
| 280 | + | |
| 281 | + /** VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' (0x41 - 0x5A) */ | |
| 282 | + public static final int VK_A = 0x41; | |
| 283 | + public static final int VK_B = 0x42; | |
| 284 | + public static final int VK_C = 0x43; | |
| 285 | + public static final int VK_D = 0x44; | |
| 286 | + public static final int VK_E = 0x45; | |
| 287 | + public static final int VK_F = 0x46; | |
| 288 | + public static final int VK_G = 0x47; | |
| 289 | + public static final int VK_H = 0x48; | |
| 290 | + public static final int VK_I = 0x49; | |
| 291 | + public static final int VK_J = 0x4A; | |
| 292 | + public static final int VK_K = 0x4B; | |
| 293 | + public static final int VK_L = 0x4C; | |
| 294 | + public static final int VK_M = 0x4D; | |
| 295 | + public static final int VK_N = 0x4E; | |
| 296 | + public static final int VK_O = 0x4F; | |
| 297 | + public static final int VK_P = 0x50; | |
| 298 | + public static final int VK_Q = 0x51; | |
| 299 | + public static final int VK_R = 0x52; | |
| 300 | + public static final int VK_S = 0x53; | |
| 301 | + public static final int VK_T = 0x54; | |
| 302 | + public static final int VK_U = 0x55; | |
| 303 | + public static final int VK_V = 0x56; | |
| 304 | + public static final int VK_W = 0x57; | |
| 305 | + public static final int VK_X = 0x58; | |
| 306 | + public static final int VK_Y = 0x59; | |
| 307 | + public static final int VK_Z = 0x5A; | |
| 308 | + | |
| 309 | + /** | |
| 310 | + * Constant for the open bracket key, "[" | |
| 311 | + */ | |
| 312 | + public static final int VK_OPEN_BRACKET = 0x5B; | |
| 313 | + | |
| 314 | + /** | |
| 315 | + * Constant for the back slash key, "\" | |
| 316 | + */ | |
| 317 | + public static final int VK_BACK_SLASH = 0x5C; | |
| 318 | + | |
| 319 | + /** | |
| 320 | + * Constant for the close bracket key, "]" | |
| 321 | + */ | |
| 322 | + public static final int VK_CLOSE_BRACKET = 0x5D; | |
| 323 | + | |
| 324 | + public static final int VK_NUMPAD0 = 0x60; | |
| 325 | + public static final int VK_NUMPAD1 = 0x61; | |
| 326 | + public static final int VK_NUMPAD2 = 0x62; | |
| 327 | + public static final int VK_NUMPAD3 = 0x63; | |
| 328 | + public static final int VK_NUMPAD4 = 0x64; | |
| 329 | + public static final int VK_NUMPAD5 = 0x65; | |
| 330 | + public static final int VK_NUMPAD6 = 0x66; | |
| 331 | + public static final int VK_NUMPAD7 = 0x67; | |
| 332 | + public static final int VK_NUMPAD8 = 0x68; | |
| 333 | + public static final int VK_NUMPAD9 = 0x69; | |
| 334 | + public static final int VK_MULTIPLY = 0x6A; | |
| 335 | + public static final int VK_ADD = 0x6B; | |
| 336 | + | |
| 337 | + /** | |
| 338 | + * This constant is obsolete, and is included only for backwards | |
| 339 | + * compatibility. | |
| 340 | + * @see #VK_SEPARATOR | |
| 341 | + */ | |
| 342 | + public static final int VK_SEPARATER = 0x6C; | |
| 343 | + | |
| 344 | + /** | |
| 345 | + * Constant for the Numpad Separator key. | |
| 346 | + * @since 1.4 | |
| 347 | + */ | |
| 348 | + public static final int VK_SEPARATOR = VK_SEPARATER; | |
| 349 | + | |
| 350 | + public static final int VK_SUBTRACT = 0x6D; | |
| 351 | + public static final int VK_DECIMAL = 0x6E; | |
| 352 | + public static final int VK_DIVIDE = 0x6F; | |
| 353 | + public static final int VK_DELETE = 0x7F; /* ASCII DEL */ | |
| 354 | + public static final int VK_NUM_LOCK = 0x90; | |
| 355 | + public static final int VK_SCROLL_LOCK = 0x91; | |
| 356 | + | |
| 357 | + /** Constant for the F1 function key. */ | |
| 358 | + public static final int VK_F1 = 0x70; | |
| 359 | + | |
| 360 | + /** Constant for the F2 function key. */ | |
| 361 | + public static final int VK_F2 = 0x71; | |
| 362 | + | |
| 363 | + /** Constant for the F3 function key. */ | |
| 364 | + public static final int VK_F3 = 0x72; | |
| 365 | + | |
| 366 | + /** Constant for the F4 function key. */ | |
| 367 | + public static final int VK_F4 = 0x73; | |
| 368 | + | |
| 369 | + /** Constant for the F5 function key. */ | |
| 370 | + public static final int VK_F5 = 0x74; | |
| 371 | + | |
| 372 | + /** Constant for the F6 function key. */ | |
| 373 | + public static final int VK_F6 = 0x75; | |
| 374 | + | |
| 375 | + /** Constant for the F7 function key. */ | |
| 376 | + public static final int VK_F7 = 0x76; | |
| 377 | + | |
| 378 | + /** Constant for the F8 function key. */ | |
| 379 | + public static final int VK_F8 = 0x77; | |
| 380 | + | |
| 381 | + /** Constant for the F9 function key. */ | |
| 382 | + public static final int VK_F9 = 0x78; | |
| 383 | + | |
| 384 | + /** Constant for the F10 function key. */ | |
| 385 | + public static final int VK_F10 = 0x79; | |
| 386 | + | |
| 387 | + /** Constant for the F11 function key. */ | |
| 388 | + public static final int VK_F11 = 0x7A; | |
| 389 | + | |
| 390 | + /** Constant for the F12 function key. */ | |
| 391 | + public static final int VK_F12 = 0x7B; | |
| 392 | + | |
| 393 | + /** | |
| 394 | + * Constant for the F13 function key. | |
| 395 | + * @since 1.2 | |
| 396 | + */ | |
| 397 | + /* F13 - F24 are used on IBM 3270 keyboard; use random range for constants. */ | |
| 398 | + public static final int VK_F13 = 0xF000; | |
| 399 | + | |
| 400 | + /** | |
| 401 | + * Constant for the F14 function key. | |
| 402 | + * @since 1.2 | |
| 403 | + */ | |
| 404 | + public static final int VK_F14 = 0xF001; | |
| 405 | + | |
| 406 | + /** | |
| 407 | + * Constant for the F15 function key. | |
| 408 | + * @since 1.2 | |
| 409 | + */ | |
| 410 | + public static final int VK_F15 = 0xF002; | |
| 411 | + | |
| 412 | + /** | |
| 413 | + * Constant for the F16 function key. | |
| 414 | + * @since 1.2 | |
| 415 | + */ | |
| 416 | + public static final int VK_F16 = 0xF003; | |
| 417 | + | |
| 418 | + /** | |
| 419 | + * Constant for the F17 function key. | |
| 420 | + * @since 1.2 | |
| 421 | + */ | |
| 422 | + public static final int VK_F17 = 0xF004; | |
| 423 | + | |
| 424 | + /** | |
| 425 | + * Constant for the F18 function key. | |
| 426 | + * @since 1.2 | |
| 427 | + */ | |
| 428 | + public static final int VK_F18 = 0xF005; | |
| 429 | + | |
| 430 | + /** | |
| 431 | + * Constant for the F19 function key. | |
| 432 | + * @since 1.2 | |
| 433 | + */ | |
| 434 | + public static final int VK_F19 = 0xF006; | |
| 435 | + | |
| 436 | + /** | |
| 437 | + * Constant for the F20 function key. | |
| 438 | + * @since 1.2 | |
| 439 | + */ | |
| 440 | + public static final int VK_F20 = 0xF007; | |
| 441 | + | |
| 442 | + /** | |
| 443 | + * Constant for the F21 function key. | |
| 444 | + * @since 1.2 | |
| 445 | + */ | |
| 446 | + public static final int VK_F21 = 0xF008; | |
| 447 | + | |
| 448 | + /** | |
| 449 | + * Constant for the F22 function key. | |
| 450 | + * @since 1.2 | |
| 451 | + */ | |
| 452 | + public static final int VK_F22 = 0xF009; | |
| 453 | + | |
| 454 | + /** | |
| 455 | + * Constant for the F23 function key. | |
| 456 | + * @since 1.2 | |
| 457 | + */ | |
| 458 | + public static final int VK_F23 = 0xF00A; | |
| 459 | + | |
| 460 | + /** | |
| 461 | + * Constant for the F24 function key. | |
| 462 | + * @since 1.2 | |
| 463 | + */ | |
| 464 | + public static final int VK_F24 = 0xF00B; | |
| 465 | + | |
| 466 | + public static final int VK_PRINTSCREEN = 0x9A; | |
| 467 | + public static final int VK_INSERT = 0x9B; | |
| 468 | + public static final int VK_HELP = 0x9C; | |
| 469 | + public static final int VK_META = 0x9D; | |
| 470 | + | |
| 471 | + public static final int VK_BACK_QUOTE = 0xC0; | |
| 472 | + public static final int VK_QUOTE = 0xDE; | |
| 473 | + | |
| 474 | + /** | |
| 475 | + * Constant for the numeric keypad <b>up</b> arrow key. | |
| 476 | + * @see #VK_UP | |
| 477 | + * @since 1.2 | |
| 478 | + */ | |
| 479 | + public static final int VK_KP_UP = 0xE0; | |
| 480 | + | |
| 481 | + /** | |
| 482 | + * Constant for the numeric keypad <b>down</b> arrow key. | |
| 483 | + * @see #VK_DOWN | |
| 484 | + * @since 1.2 | |
| 485 | + */ | |
| 486 | + public static final int VK_KP_DOWN = 0xE1; | |
| 487 | + | |
| 488 | + /** | |
| 489 | + * Constant for the numeric keypad <b>left</b> arrow key. | |
| 490 | + * @see #VK_LEFT | |
| 491 | + * @since 1.2 | |
| 492 | + */ | |
| 493 | + public static final int VK_KP_LEFT = 0xE2; | |
| 494 | + | |
| 495 | + /** | |
| 496 | + * Constant for the numeric keypad <b>right</b> arrow key. | |
| 497 | + * @see #VK_RIGHT | |
| 498 | + * @since 1.2 | |
| 499 | + */ | |
| 500 | + public static final int VK_KP_RIGHT = 0xE3; | |
| 501 | + | |
| 502 | + /* For European keyboards */ | |
| 503 | + /** @since 1.2 */ | |
| 504 | + public static final int VK_DEAD_GRAVE = 0x80; | |
| 505 | + /** @since 1.2 */ | |
| 506 | + public static final int VK_DEAD_ACUTE = 0x81; | |
| 507 | + /** @since 1.2 */ | |
| 508 | + public static final int VK_DEAD_CIRCUMFLEX = 0x82; | |
| 509 | + /** @since 1.2 */ | |
| 510 | + public static final int VK_DEAD_TILDE = 0x83; | |
| 511 | + /** @since 1.2 */ | |
| 512 | + public static final int VK_DEAD_MACRON = 0x84; | |
| 513 | + /** @since 1.2 */ | |
| 514 | + public static final int VK_DEAD_BREVE = 0x85; | |
| 515 | + /** @since 1.2 */ | |
| 516 | + public static final int VK_DEAD_ABOVEDOT = 0x86; | |
| 517 | + /** @since 1.2 */ | |
| 518 | + public static final int VK_DEAD_DIAERESIS = 0x87; | |
| 519 | + /** @since 1.2 */ | |
| 520 | + public static final int VK_DEAD_ABOVERING = 0x88; | |
| 521 | + /** @since 1.2 */ | |
| 522 | + public static final int VK_DEAD_DOUBLEACUTE = 0x89; | |
| 523 | + /** @since 1.2 */ | |
| 524 | + public static final int VK_DEAD_CARON = 0x8a; | |
| 525 | + /** @since 1.2 */ | |
| 526 | + public static final int VK_DEAD_CEDILLA = 0x8b; | |
| 527 | + /** @since 1.2 */ | |
| 528 | + public static final int VK_DEAD_OGONEK = 0x8c; | |
| 529 | + /** @since 1.2 */ | |
| 530 | + public static final int VK_DEAD_IOTA = 0x8d; | |
| 531 | + /** @since 1.2 */ | |
| 532 | + public static final int VK_DEAD_VOICED_SOUND = 0x8e; | |
| 533 | + /** @since 1.2 */ | |
| 534 | + public static final int VK_DEAD_SEMIVOICED_SOUND = 0x8f; | |
| 535 | + | |
| 536 | + /** @since 1.2 */ | |
| 537 | + public static final int VK_AMPERSAND = 0x96; | |
| 538 | + /** @since 1.2 */ | |
| 539 | + public static final int VK_ASTERISK = 0x97; | |
| 540 | + /** @since 1.2 */ | |
| 541 | + public static final int VK_QUOTEDBL = 0x98; | |
| 542 | + /** @since 1.2 */ | |
| 543 | + public static final int VK_LESS = 0x99; | |
| 544 | + | |
| 545 | + /** @since 1.2 */ | |
| 546 | + public static final int VK_GREATER = 0xa0; | |
| 547 | + /** @since 1.2 */ | |
| 548 | + public static final int VK_BRACELEFT = 0xa1; | |
| 549 | + /** @since 1.2 */ | |
| 550 | + public static final int VK_BRACERIGHT = 0xa2; | |
| 551 | + | |
| 552 | + /** | |
| 553 | + * Constant for the "@" key. | |
| 554 | + * @since 1.2 | |
| 555 | + */ | |
| 556 | + public static final int VK_AT = 0x0200; | |
| 557 | + | |
| 558 | + /** | |
| 559 | + * Constant for the ":" key. | |
| 560 | + * @since 1.2 | |
| 561 | + */ | |
| 562 | + public static final int VK_COLON = 0x0201; | |
| 563 | + | |
| 564 | + /** | |
| 565 | + * Constant for the "^" key. | |
| 566 | + * @since 1.2 | |
| 567 | + */ | |
| 568 | + public static final int VK_CIRCUMFLEX = 0x0202; | |
| 569 | + | |
| 570 | + /** | |
| 571 | + * Constant for the "$" key. | |
| 572 | + * @since 1.2 | |
| 573 | + */ | |
| 574 | + public static final int VK_DOLLAR = 0x0203; | |
| 575 | + | |
| 576 | + /** | |
| 577 | + * Constant for the Euro currency sign key. | |
| 578 | + * @since 1.2 | |
| 579 | + */ | |
| 580 | + public static final int VK_EURO_SIGN = 0x0204; | |
| 581 | + | |
| 582 | + /** | |
| 583 | + * Constant for the "!" key. | |
| 584 | + * @since 1.2 | |
| 585 | + */ | |
| 586 | + public static final int VK_EXCLAMATION_MARK = 0x0205; | |
| 587 | + | |
| 588 | + /** | |
| 589 | + * Constant for the inverted exclamation mark key. | |
| 590 | + * @since 1.2 | |
| 591 | + */ | |
| 592 | + public static final int VK_INVERTED_EXCLAMATION_MARK = 0x0206; | |
| 593 | + | |
| 594 | + /** | |
| 595 | + * Constant for the "(" key. | |
| 596 | + * @since 1.2 | |
| 597 | + */ | |
| 598 | + public static final int VK_LEFT_PARENTHESIS = 0x0207; | |
| 599 | + | |
| 600 | + /** | |
| 601 | + * Constant for the "#" key. | |
| 602 | + * @since 1.2 | |
| 603 | + */ | |
| 604 | + public static final int VK_NUMBER_SIGN = 0x0208; | |
| 605 | + | |
| 606 | + /** | |
| 607 | + * Constant for the "+" key. | |
| 608 | + * @since 1.2 | |
| 609 | + */ | |
| 610 | + public static final int VK_PLUS = 0x0209; | |
| 611 | + | |
| 612 | + /** | |
| 613 | + * Constant for the ")" key. | |
| 614 | + * @since 1.2 | |
| 615 | + */ | |
| 616 | + public static final int VK_RIGHT_PARENTHESIS = 0x020A; | |
| 617 | + | |
| 618 | + /** | |
| 619 | + * Constant for the "_" key. | |
| 620 | + * @since 1.2 | |
| 621 | + */ | |
| 622 | + public static final int VK_UNDERSCORE = 0x020B; | |
| 623 | + | |
| 624 | + /** | |
| 625 | + * Constant for the Microsoft Windows "Windows" key. | |
| 626 | + * It is used for both the left and right version of the key. | |
| 627 | + * @see #getKeyLocation() | |
| 628 | + * @since 1.5 | |
| 629 | + */ | |
| 630 | + public static final int VK_WINDOWS = 0x020C; | |
| 631 | + | |
| 632 | + /** | |
| 633 | + * Constant for the Microsoft Windows Context Menu key. | |
| 634 | + * @since 1.5 | |
| 635 | + */ | |
| 636 | + public static final int VK_CONTEXT_MENU = 0x020D; | |
| 637 | + | |
| 638 | + /* for input method support on Asian Keyboards */ | |
| 639 | + | |
| 640 | + /* not clear what this means - listed in Microsoft Windows API */ | |
| 641 | + public static final int VK_FINAL = 0x0018; | |
| 642 | + | |
| 643 | + /** Constant for the Convert function key. */ | |
| 644 | + /* Japanese PC 106 keyboard, Japanese Solaris keyboard: henkan */ | |
| 645 | + public static final int VK_CONVERT = 0x001C; | |
| 646 | + | |
| 647 | + /** Constant for the Don't Convert function key. */ | |
| 648 | + /* Japanese PC 106 keyboard: muhenkan */ | |
| 649 | + public static final int VK_NONCONVERT = 0x001D; | |
| 650 | + | |
| 651 | + /** Constant for the Accept or Commit function key. */ | |
| 652 | + /* Japanese Solaris keyboard: kakutei */ | |
| 653 | + public static final int VK_ACCEPT = 0x001E; | |
| 654 | + | |
| 655 | + /* not clear what this means - listed in Microsoft Windows API */ | |
| 656 | + public static final int VK_MODECHANGE = 0x001F; | |
| 657 | + | |
| 658 | + /* replaced by VK_KANA_LOCK for Microsoft Windows and Solaris; | |
| 659 | + might still be used on other platforms */ | |
| 660 | + public static final int VK_KANA = 0x0015; | |
| 661 | + | |
| 662 | + /* replaced by VK_INPUT_METHOD_ON_OFF for Microsoft Windows and Solaris; | |
| 663 | + might still be used for other platforms */ | |
| 664 | + public static final int VK_KANJI = 0x0019; | |
| 665 | + | |
| 666 | + /** | |
| 667 | + * Constant for the Alphanumeric function key. | |
| 668 | + * @since 1.2 | |
| 669 | + */ | |
| 670 | + /* Japanese PC 106 keyboard: eisuu */ | |
| 671 | + public static final int VK_ALPHANUMERIC = 0x00F0; | |
| 672 | + | |
| 673 | + /** | |
| 674 | + * Constant for the Katakana function key. | |
| 675 | + * @since 1.2 | |
| 676 | + */ | |
| 677 | + /* Japanese PC 106 keyboard: katakana */ | |
| 678 | + public static final int VK_KATAKANA = 0x00F1; | |
| 679 | + | |
| 680 | + /** | |
| 681 | + * Constant for the Hiragana function key. | |
| 682 | + * @since 1.2 | |
| 683 | + */ | |
| 684 | + /* Japanese PC 106 keyboard: hiragana */ | |
| 685 | + public static final int VK_HIRAGANA = 0x00F2; | |
| 686 | + | |
| 687 | + /** | |
| 688 | + * Constant for the Full-Width Characters function key. | |
| 689 | + * @since 1.2 | |
| 690 | + */ | |
| 691 | + /* Japanese PC 106 keyboard: zenkaku */ | |
| 692 | + public static final int VK_FULL_WIDTH = 0x00F3; | |
| 693 | + | |
| 694 | + /** | |
| 695 | + * Constant for the Half-Width Characters function key. | |
| 696 | + * @since 1.2 | |
| 697 | + */ | |
| 698 | + /* Japanese PC 106 keyboard: hankaku */ | |
| 699 | + public static final int VK_HALF_WIDTH = 0x00F4; | |
| 700 | + | |
| 701 | + /** | |
| 702 | + * Constant for the Roman Characters function key. | |
| 703 | + * @since 1.2 | |
| 704 | + */ | |
| 705 | + /* Japanese PC 106 keyboard: roumaji */ | |
| 706 | + public static final int VK_ROMAN_CHARACTERS = 0x00F5; | |
| 707 | + | |
| 708 | + /** | |
| 709 | + * Constant for the All Candidates function key. | |
| 710 | + * @since 1.2 | |
| 711 | + */ | |
| 712 | + /* Japanese PC 106 keyboard - VK_CONVERT + ALT: zenkouho */ | |
| 713 | + public static final int VK_ALL_CANDIDATES = 0x0100; | |
| 714 | + | |
| 715 | + /** | |
| 716 | + * Constant for the Previous Candidate function key. | |
| 717 | + * @since 1.2 | |
| 718 | + */ | |
| 719 | + /* Japanese PC 106 keyboard - VK_CONVERT + SHIFT: maekouho */ | |
| 720 | + public static final int VK_PREVIOUS_CANDIDATE = 0x0101; | |
| 721 | + | |
| 722 | + /** | |
| 723 | + * Constant for the Code Input function key. | |
| 724 | + * @since 1.2 | |
| 725 | + */ | |
| 726 | + /* Japanese PC 106 keyboard - VK_ALPHANUMERIC + ALT: kanji bangou */ | |
| 727 | + public static final int VK_CODE_INPUT = 0x0102; | |
| 728 | + | |
| 729 | + /** | |
| 730 | + * Constant for the Japanese-Katakana function key. | |
| 731 | + * This key switches to a Japanese input method and selects its Katakana input mode. | |
| 732 | + * @since 1.2 | |
| 733 | + */ | |
| 734 | + /* Japanese Macintosh keyboard - VK_JAPANESE_HIRAGANA + SHIFT */ | |
| 735 | + public static final int VK_JAPANESE_KATAKANA = 0x0103; | |
| 736 | + | |
| 737 | + /** | |
| 738 | + * Constant for the Japanese-Hiragana function key. | |
| 739 | + * This key switches to a Japanese input method and selects its Hiragana input mode. | |
| 740 | + * @since 1.2 | |
| 741 | + */ | |
| 742 | + /* Japanese Macintosh keyboard */ | |
| 743 | + public static final int VK_JAPANESE_HIRAGANA = 0x0104; | |
| 744 | + | |
| 745 | + /** | |
| 746 | + * Constant for the Japanese-Roman function key. | |
| 747 | + * This key switches to a Japanese input method and selects its Roman-Direct input mode. | |
| 748 | + * @since 1.2 | |
| 749 | + */ | |
| 750 | + /* Japanese Macintosh keyboard */ | |
| 751 | + public static final int VK_JAPANESE_ROMAN = 0x0105; | |
| 752 | + | |
| 753 | + /** | |
| 754 | + * Constant for the locking Kana function key. | |
| 755 | + * This key locks the keyboard into a Kana layout. | |
| 756 | + * @since 1.3 | |
| 757 | + */ | |
| 758 | + /* Japanese PC 106 keyboard with special Windows driver - eisuu + Control; Japanese Solaris keyboard: kana */ | |
| 759 | + public static final int VK_KANA_LOCK = 0x0106; | |
| 760 | + | |
| 761 | + /** | |
| 762 | + * Constant for the input method on/off key. | |
| 763 | + * @since 1.3 | |
| 764 | + */ | |
| 765 | + /* Japanese PC 106 keyboard: kanji. Japanese Solaris keyboard: nihongo */ | |
| 766 | + public static final int VK_INPUT_METHOD_ON_OFF = 0x0107; | |
| 767 | + | |
| 768 | + /* for Sun keyboards */ | |
| 769 | + /** @since 1.2 */ | |
| 770 | + public static final int VK_CUT = 0xFFD1; | |
| 771 | + /** @since 1.2 */ | |
| 772 | + public static final int VK_COPY = 0xFFCD; | |
| 773 | + /** @since 1.2 */ | |
| 774 | + public static final int VK_PASTE = 0xFFCF; | |
| 775 | + /** @since 1.2 */ | |
| 776 | + public static final int VK_UNDO = 0xFFCB; | |
| 777 | + /** @since 1.2 */ | |
| 778 | + public static final int VK_AGAIN = 0xFFC9; | |
| 779 | + /** @since 1.2 */ | |
| 780 | + public static final int VK_FIND = 0xFFD0; | |
| 781 | + /** @since 1.2 */ | |
| 782 | + public static final int VK_PROPS = 0xFFCA; | |
| 783 | + /** @since 1.2 */ | |
| 784 | + public static final int VK_STOP = 0xFFC8; | |
| 785 | + | |
| 786 | + /** | |
| 787 | + * Constant for the Compose function key. | |
| 788 | + * @since 1.2 | |
| 789 | + */ | |
| 790 | + public static final int VK_COMPOSE = 0xFF20; | |
| 791 | + | |
| 792 | + /** | |
| 793 | + * Constant for the AltGraph function key. | |
| 794 | + * @since 1.2 | |
| 795 | + */ | |
| 796 | + public static final int VK_ALT_GRAPH = 0xFF7E; | |
| 797 | + | |
| 798 | + /** | |
| 799 | + * Constant for the Begin key. | |
| 800 | + * @since 1.5 | |
| 801 | + */ | |
| 802 | + public static final int VK_BEGIN = 0xFF58; | |
| 803 | + | |
| 804 | + /** | |
| 805 | + * This value is used to indicate that the keyCode is unknown. | |
| 806 | + * KEY_TYPED events do not have a keyCode value; this value | |
| 807 | + * is used instead. | |
| 808 | + */ | |
| 809 | + public static final int VK_UNDEFINED = 0x0; | |
| 810 | + | |
| 811 | + /** | |
| 812 | + * KEY_PRESSED and KEY_RELEASED events which do not map to a | |
| 813 | + * valid Unicode character use this for the keyChar value. | |
| 814 | + */ | |
| 815 | + public static final char CHAR_UNDEFINED = 0xFFFF; | |
| 816 | + | |
| 817 | + /** | |
| 818 | + * A constant indicating that the keyLocation is indeterminate | |
| 819 | + * or not relevant. | |
| 820 | + * <code>KEY_TYPED</code> events do not have a keyLocation; this value | |
| 821 | + * is used instead. | |
| 822 | + * @since 1.4 | |
| 823 | + */ | |
| 824 | + public static final int KEY_LOCATION_UNKNOWN = 0; | |
| 825 | + | |
| 826 | + /** | |
| 827 | + * A constant indicating that the key pressed or released | |
| 828 | + * is not distinguished as the left or right version of a key, | |
| 829 | + * and did not originate on the numeric keypad (or did not | |
| 830 | + * originate with a virtual key corresponding to the numeric | |
| 831 | + * keypad). | |
| 832 | + * @since 1.4 | |
| 833 | + */ | |
| 834 | + public static final int KEY_LOCATION_STANDARD = 1; | |
| 835 | + | |
| 836 | + /** | |
| 837 | + * A constant indicating that the key pressed or released is in | |
| 838 | + * the left key location (there is more than one possible location | |
| 839 | + * for this key). Example: the left shift key. | |
| 840 | + * @since 1.4 | |
| 841 | + */ | |
| 842 | + public static final int KEY_LOCATION_LEFT = 2; | |
| 843 | + | |
| 844 | + /** | |
| 845 | + * A constant indicating that the key pressed or released is in | |
| 846 | + * the right key location (there is more than one possible location | |
| 847 | + * for this key). Example: the right shift key. | |
| 848 | + * @since 1.4 | |
| 849 | + */ | |
| 850 | + public static final int KEY_LOCATION_RIGHT = 3; | |
| 851 | + | |
| 852 | + /** | |
| 853 | + * A constant indicating that the key event originated on the | |
| 854 | + * numeric keypad or with a virtual key corresponding to the | |
| 855 | + * numeric keypad. | |
| 856 | + * @since 1.4 | |
| 857 | + */ | |
| 858 | + public static final int KEY_LOCATION_NUMPAD = 4; | |
| 859 | + | |
| 860 | + /** | |
| 861 | + * The unique value assigned to each of the keys on the | |
| 862 | + * keyboard. There is a common set of key codes that | |
| 863 | + * can be fired by most keyboards. | |
| 864 | + * The symbolic name for a key code should be used rather | |
| 865 | + * than the code value itself. | |
| 866 | + * | |
| 867 | + * @serial | |
| 868 | + * @see #getKeyCode() | |
| 869 | + * @see #setKeyCode(int) | |
| 870 | + */ | |
| 871 | + int keyCode; | |
| 872 | + | |
| 873 | + /** | |
| 874 | + * <code>keyChar</code> is a valid unicode character | |
| 875 | + * that is fired by a key or a key combination on | |
| 876 | + * a keyboard. | |
| 877 | + * | |
| 878 | + * @serial | |
| 879 | + * @see #getKeyChar() | |
| 880 | + * @see #setKeyChar(char) | |
| 881 | + */ | |
| 882 | + char keyChar; | |
| 883 | + | |
| 884 | + /** | |
| 885 | + * The location of the key on the keyboard. | |
| 886 | + * | |
| 887 | + * Some keys occur more than once on a keyboard, e.g. the left and | |
| 888 | + * right shift keys. Additionally, some keys occur on the numeric | |
| 889 | + * keypad. This variable is used to distinguish such keys. | |
| 890 | + * | |
| 891 | + * The only legal values are <code>KEY_LOCATION_UNKNOWN</code>, | |
| 892 | + * <code>KEY_LOCATION_STANDARD</code>, <code>KEY_LOCATION_LEFT</code>, | |
| 893 | + * <code>KEY_LOCATION_RIGHT</code>, and <code>KEY_LOCATION_NUMPAD</code>. | |
| 894 | + * | |
| 895 | + * @serial | |
| 896 | + * @see #getKeyLocation() | |
| 897 | + */ | |
| 898 | + int keyLocation; | |
| 899 | + | |
| 900 | + //set from native code. | |
| 901 | + private transient long rawCode = 0; | |
| 902 | + private transient long primaryLevelUnicode = 0; | |
| 903 | + private transient long scancode = 0; // for MS Windows only | |
| 904 | + private transient long extendedKeyCode = 0; | |
| 905 | + | |
| 906 | + /* | |
| 907 | + * JDK 1.1 serialVersionUID | |
| 908 | + */ | |
| 909 | + private static final long serialVersionUID = -2352130953028126954L; | |
| 910 | + | |
| 911 | + static { | |
| 912 | + /* ensure that the necessary native libraries are loaded */ | |
| 913 | + NativeLibLoader.loadLibraries(); | |
| 914 | + if (!GraphicsEnvironment.isHeadless()) { | |
| 915 | + initIDs(); | |
| 916 | + } | |
| 917 | + } | |
| 918 | + | |
| 919 | + /** | |
| 920 | + * Initialize JNI field and method IDs for fields that may be | |
| 921 | + * accessed from C. | |
| 922 | + */ | |
| 923 | + private static native void initIDs(); | |
| 924 | + | |
| 925 | + private KeyEvent(Component source, int id, long when, int modifiers, | |
| 926 | + int keyCode, char keyChar, int keyLocation, boolean isProxyActive) { | |
| 927 | + this(source, id, when, modifiers, keyCode, keyChar, keyLocation); | |
| 928 | + this.isProxyActive = isProxyActive; | |
| 929 | + } | |
| 930 | + | |
| 931 | + /** | |
| 932 | + * Constructs a <code>KeyEvent</code> object. | |
| 933 | + * <p>This method throws an | |
| 934 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 935 | + * is <code>null</code>. | |
| 936 | + * | |
| 937 | + * @param source The <code>Component</code> that originated the event | |
| 938 | + * @param id An integer indicating the type of event. | |
| 939 | + * For information on allowable values, see | |
| 940 | + * the class description for {@link KeyEvent} | |
| 941 | + * @param when A long integer that specifies the time the event | |
| 942 | + * occurred. | |
| 943 | + * Passing negative or zero value | |
| 944 | + * is not recommended | |
| 945 | + * @param modifiers The modifier keys down during event (shift, ctrl, | |
| 946 | + * alt, meta). | |
| 947 | + * Passing negative value | |
| 948 | + * is not recommended. | |
| 949 | + * Zero value means that no modifiers were passed. | |
| 950 | + * Use either an extended _DOWN_MASK or old _MASK modifiers, | |
| 951 | + * however do not mix models in the one event. | |
| 952 | + * The extended modifiers are preferred for using | |
| 953 | + * @param keyCode The integer code for an actual key, or VK_UNDEFINED | |
| 954 | + * (for a key-typed event) | |
| 955 | + * @param keyChar The Unicode character generated by this event, or | |
| 956 | + * CHAR_UNDEFINED (for key-pressed and key-released | |
| 957 | + * events which do not map to a valid Unicode character) | |
| 958 | + * @param keyLocation Identifies the key location. The only legal | |
| 959 | + * values are <code>KEY_LOCATION_UNKNOWN</code>, | |
| 960 | + * <code>KEY_LOCATION_STANDARD</code>, <code>KEY_LOCATION_LEFT</code>, | |
| 961 | + * <code>KEY_LOCATION_RIGHT</code>, and <code>KEY_LOCATION_NUMPAD</code>. | |
| 962 | + * @throws IllegalArgumentException | |
| 963 | + * if <code>id</code> is <code>KEY_TYPED</code> and | |
| 964 | + * <code>keyChar</code> is <code>CHAR_UNDEFINED</code>; | |
| 965 | + * or if <code>id</code> is <code>KEY_TYPED</code> and | |
| 966 | + * <code>keyCode</code> is not <code>VK_UNDEFINED</code>; | |
| 967 | + * or if <code>id</code> is <code>KEY_TYPED</code> and | |
| 968 | + * <code>keyLocation</code> is not <code>KEY_LOCATION_UNKNOWN</code>; | |
| 969 | + * or if <code>keyLocation</code> is not one of the legal | |
| 970 | + * values enumerated above. | |
| 971 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 972 | + * @see #getSource() | |
| 973 | + * @see #getID() | |
| 974 | + * @see #getWhen() | |
| 975 | + * @see #getModifiers() | |
| 976 | + * @see #getKeyCode() | |
| 977 | + * @see #getKeyChar() | |
| 978 | + * @see #getKeyLocation() | |
| 979 | + * @since 1.4 | |
| 980 | + */ | |
| 981 | + public KeyEvent(Component source, int id, long when, int modifiers, | |
| 982 | + int keyCode, char keyChar, int keyLocation) { | |
| 983 | + super(source, id, when, modifiers); | |
| 984 | + if (id == KEY_TYPED) { | |
| 985 | + if (keyChar == CHAR_UNDEFINED) { | |
| 986 | + throw new IllegalArgumentException("invalid keyChar"); | |
| 987 | + } | |
| 988 | + if (keyCode != VK_UNDEFINED) { | |
| 989 | + throw new IllegalArgumentException("invalid keyCode"); | |
| 990 | + } | |
| 991 | + if (keyLocation != KEY_LOCATION_UNKNOWN) { | |
| 992 | + throw new IllegalArgumentException("invalid keyLocation"); | |
| 993 | + } | |
| 994 | + } | |
| 995 | + | |
| 996 | + this.keyCode = keyCode; | |
| 997 | + this.keyChar = keyChar; | |
| 998 | + | |
| 999 | + if ((keyLocation < KEY_LOCATION_UNKNOWN) || | |
| 1000 | + (keyLocation > KEY_LOCATION_NUMPAD)) { | |
| 1001 | + throw new IllegalArgumentException("invalid keyLocation"); | |
| 1002 | + } | |
| 1003 | + this.keyLocation = keyLocation; | |
| 1004 | + if ((getModifiers() != 0) && (getModifiersEx() == 0)) { | |
| 1005 | + setNewModifiers(); | |
| 1006 | + } else if ((getModifiers() == 0) && (getModifiersEx() != 0)) { | |
| 1007 | + setOldModifiers(); | |
| 1008 | + } | |
| 1009 | + } | |
| 1010 | + | |
| 1011 | + /** | |
| 1012 | + * Constructs a <code>KeyEvent</code> object. | |
| 1013 | + * <p> This method throws an | |
| 1014 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 1015 | + * is <code>null</code>. | |
| 1016 | + * | |
| 1017 | + * @param source The <code>Component</code> that originated the event | |
| 1018 | + * @param id An integer indicating the type of event. | |
| 1019 | + * For information on allowable values, see | |
| 1020 | + * the class description for {@link KeyEvent} | |
| 1021 | + * @param when A long integer that specifies the time the event | |
| 1022 | + * occurred. | |
| 1023 | + * Passing negative or zero value | |
| 1024 | + * is not recommended | |
| 1025 | + * @param modifiers The modifier keys down during event (shift, ctrl, | |
| 1026 | + * alt, meta). | |
| 1027 | + * Passing negative value | |
| 1028 | + * is not recommended. | |
| 1029 | + * Zero value means that no modifiers were passed. | |
| 1030 | + * Use either an extended _DOWN_MASK or old _MASK modifiers, | |
| 1031 | + * however do not mix models in the one event. | |
| 1032 | + * The extended modifiers are preferred for using | |
| 1033 | + * @param keyCode The integer code for an actual key, or VK_UNDEFINED | |
| 1034 | + * (for a key-typed event) | |
| 1035 | + * @param keyChar The Unicode character generated by this event, or | |
| 1036 | + * CHAR_UNDEFINED (for key-pressed and key-released | |
| 1037 | + * events which do not map to a valid Unicode character) | |
| 1038 | + * @throws IllegalArgumentException if <code>id</code> is | |
| 1039 | + * <code>KEY_TYPED</code> and <code>keyChar</code> is | |
| 1040 | + * <code>CHAR_UNDEFINED</code>; or if <code>id</code> is | |
| 1041 | + * <code>KEY_TYPED</code> and <code>keyCode</code> is not | |
| 1042 | + * <code>VK_UNDEFINED</code> | |
| 1043 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 1044 | + * @see #getSource() | |
| 1045 | + * @see #getID() | |
| 1046 | + * @see #getWhen() | |
| 1047 | + * @see #getModifiers() | |
| 1048 | + * @see #getKeyCode() | |
| 1049 | + * @see #getKeyChar() | |
| 1050 | + */ | |
| 1051 | + public KeyEvent(Component source, int id, long when, int modifiers, | |
| 1052 | + int keyCode, char keyChar) { | |
| 1053 | + this(source, id, when, modifiers, keyCode, keyChar, | |
| 1054 | + KEY_LOCATION_UNKNOWN); | |
| 1055 | + } | |
| 1056 | + | |
| 1057 | + /** | |
| 1058 | + * @deprecated as of JDK1.1 | |
| 1059 | + */ | |
| 1060 | + @Deprecated | |
| 1061 | + public KeyEvent(Component source, int id, long when, int modifiers, | |
| 1062 | + int keyCode) { | |
| 1063 | + this(source, id, when, modifiers, keyCode, (char)keyCode); | |
| 1064 | + } | |
| 1065 | + | |
| 1066 | + /** | |
| 1067 | + * Returns the integer keyCode associated with the key in this event. | |
| 1068 | + * | |
| 1069 | + * @return the integer code for an actual key on the keyboard. | |
| 1070 | + * (For <code>KEY_TYPED</code> events, the keyCode is | |
| 1071 | + * <code>VK_UNDEFINED</code>.) | |
| 1072 | + */ | |
| 1073 | + public int getKeyCode() { | |
| 1074 | + return keyCode; | |
| 1075 | + } | |
| 1076 | + | |
| 1077 | + /** | |
| 1078 | + * Set the keyCode value to indicate a physical key. | |
| 1079 | + * | |
| 1080 | + * @param keyCode an integer corresponding to an actual key on the keyboard. | |
| 1081 | + */ | |
| 1082 | + public void setKeyCode(int keyCode) { | |
| 1083 | + this.keyCode = keyCode; | |
| 1084 | + } | |
| 1085 | + | |
| 1086 | + /** | |
| 1087 | + * Returns the character associated with the key in this event. | |
| 1088 | + * For example, the <code>KEY_TYPED</code> event for shift + "a" | |
| 1089 | + * returns the value for "A". | |
| 1090 | + * <p> | |
| 1091 | + * <code>KEY_PRESSED</code> and <code>KEY_RELEASED</code> events | |
| 1092 | + * are not intended for reporting of character input. Therefore, | |
| 1093 | + * the values returned by this method are guaranteed to be | |
| 1094 | + * meaningful only for <code>KEY_TYPED</code> events. | |
| 1095 | + * | |
| 1096 | + * @return the Unicode character defined for this key event. | |
| 1097 | + * If no valid Unicode character exists for this key event, | |
| 1098 | + * <code>CHAR_UNDEFINED</code> is returned. | |
| 1099 | + */ | |
| 1100 | + public char getKeyChar() { | |
| 1101 | + return keyChar; | |
| 1102 | + } | |
| 1103 | + | |
| 1104 | + /** | |
| 1105 | + * Set the keyChar value to indicate a logical character. | |
| 1106 | + * | |
| 1107 | + * @param keyChar a char corresponding to to the combination of keystrokes | |
| 1108 | + * that make up this event. | |
| 1109 | + */ | |
| 1110 | + public void setKeyChar(char keyChar) { | |
| 1111 | + this.keyChar = keyChar; | |
| 1112 | + } | |
| 1113 | + | |
| 1114 | + /** | |
| 1115 | + * Set the modifiers to indicate additional keys that were held down | |
| 1116 | + * (e.g. shift, ctrl, alt, meta) defined as part of InputEvent. | |
| 1117 | + * <p> | |
| 1118 | + * NOTE: use of this method is not recommended, because many AWT | |
| 1119 | + * implementations do not recognize modifier changes. This is | |
| 1120 | + * especially true for <code>KEY_TYPED</code> events where the shift | |
| 1121 | + * modifier is changed. | |
| 1122 | + * | |
| 1123 | + * @param modifiers an integer combination of the modifier constants. | |
| 1124 | + * @see InputEvent | |
| 1125 | + * @deprecated as of JDK1.1.4 | |
| 1126 | + */ | |
| 1127 | + @Deprecated | |
| 1128 | + public void setModifiers(int modifiers) { | |
| 1129 | + this.modifiers = modifiers; | |
| 1130 | + if ((getModifiers() != 0) && (getModifiersEx() == 0)) { | |
| 1131 | + setNewModifiers(); | |
| 1132 | + } else if ((getModifiers() == 0) && (getModifiersEx() != 0)) { | |
| 1133 | + setOldModifiers(); | |
| 1134 | + } | |
| 1135 | + } | |
| 1136 | + | |
| 1137 | + /** | |
| 1138 | + * Returns the location of the key that originated this key event. | |
| 1139 | + * | |
| 1140 | + * Some keys occur more than once on a keyboard, e.g. the left and | |
| 1141 | + * right shift keys. Additionally, some keys occur on the numeric | |
| 1142 | + * keypad. This provides a way of distinguishing such keys. | |
| 1143 | + * | |
| 1144 | + * @return the location of the key that was pressed or released. | |
| 1145 | + * Always returns <code>KEY_LOCATION_UNKNOWN</code> for | |
| 1146 | + * <code>KEY_TYPED</code> events. | |
| 1147 | + * @since 1.4 | |
| 1148 | + */ | |
| 1149 | + public int getKeyLocation() { | |
| 1150 | + return keyLocation; | |
| 1151 | + } | |
| 1152 | + | |
| 1153 | + /** | |
| 1154 | + * Returns a String describing the keyCode, such as "HOME", "F1" or "A". | |
| 1155 | + * These strings can be localized by changing the awt.properties file. | |
| 1156 | + * | |
| 1157 | + * @return a string containing a text description for a physical key, | |
| 1158 | + * identified by its keyCode | |
| 1159 | + */ | |
| 1160 | + public static String getKeyText(int keyCode) { | |
| 1161 | + if (keyCode >= VK_0 && keyCode <= VK_9 || | |
| 1162 | + keyCode >= VK_A && keyCode <= VK_Z) { | |
| 1163 | + return String.valueOf((char)keyCode); | |
| 1164 | + } | |
| 1165 | + | |
| 1166 | + switch(keyCode) { | |
| 1167 | + case VK_ENTER: return Toolkit.getProperty("AWT.enter", "Enter"); | |
| 1168 | + case VK_BACK_SPACE: return Toolkit.getProperty("AWT.backSpace", "Backspace"); | |
| 1169 | + case VK_TAB: return Toolkit.getProperty("AWT.tab", "Tab"); | |
| 1170 | + case VK_CANCEL: return Toolkit.getProperty("AWT.cancel", "Cancel"); | |
| 1171 | + case VK_CLEAR: return Toolkit.getProperty("AWT.clear", "Clear"); | |
| 1172 | + case VK_COMPOSE: return Toolkit.getProperty("AWT.compose", "Compose"); | |
| 1173 | + case VK_PAUSE: return Toolkit.getProperty("AWT.pause", "Pause"); | |
| 1174 | + case VK_CAPS_LOCK: return Toolkit.getProperty("AWT.capsLock", "Caps Lock"); | |
| 1175 | + case VK_ESCAPE: return Toolkit.getProperty("AWT.escape", "Escape"); | |
| 1176 | + case VK_SPACE: return Toolkit.getProperty("AWT.space", "Space"); | |
| 1177 | + case VK_PAGE_UP: return Toolkit.getProperty("AWT.pgup", "Page Up"); | |
| 1178 | + case VK_PAGE_DOWN: return Toolkit.getProperty("AWT.pgdn", "Page Down"); | |
| 1179 | + case VK_END: return Toolkit.getProperty("AWT.end", "End"); | |
| 1180 | + case VK_HOME: return Toolkit.getProperty("AWT.home", "Home"); | |
| 1181 | + case VK_LEFT: return Toolkit.getProperty("AWT.left", "Left"); | |
| 1182 | + case VK_UP: return Toolkit.getProperty("AWT.up", "Up"); | |
| 1183 | + case VK_RIGHT: return Toolkit.getProperty("AWT.right", "Right"); | |
| 1184 | + case VK_DOWN: return Toolkit.getProperty("AWT.down", "Down"); | |
| 1185 | + case VK_BEGIN: return Toolkit.getProperty("AWT.begin", "Begin"); | |
| 1186 | + | |
| 1187 | + // modifiers | |
| 1188 | + case VK_SHIFT: return Toolkit.getProperty("AWT.shift", "Shift"); | |
| 1189 | + case VK_CONTROL: return Toolkit.getProperty("AWT.control", "Control"); | |
| 1190 | + case VK_ALT: return Toolkit.getProperty("AWT.alt", "Alt"); | |
| 1191 | + case VK_META: return Toolkit.getProperty("AWT.meta", "Meta"); | |
| 1192 | + case VK_ALT_GRAPH: return Toolkit.getProperty("AWT.altGraph", "Alt Graph"); | |
| 1193 | + | |
| 1194 | + // punctuation | |
| 1195 | + case VK_COMMA: return Toolkit.getProperty("AWT.comma", "Comma"); | |
| 1196 | + case VK_PERIOD: return Toolkit.getProperty("AWT.period", "Period"); | |
| 1197 | + case VK_SLASH: return Toolkit.getProperty("AWT.slash", "Slash"); | |
| 1198 | + case VK_SEMICOLON: return Toolkit.getProperty("AWT.semicolon", "Semicolon"); | |
| 1199 | + case VK_EQUALS: return Toolkit.getProperty("AWT.equals", "Equals"); | |
| 1200 | + case VK_OPEN_BRACKET: return Toolkit.getProperty("AWT.openBracket", "Open Bracket"); | |
| 1201 | + case VK_BACK_SLASH: return Toolkit.getProperty("AWT.backSlash", "Back Slash"); | |
| 1202 | + case VK_CLOSE_BRACKET: return Toolkit.getProperty("AWT.closeBracket", "Close Bracket"); | |
| 1203 | + | |
| 1204 | + // numpad numeric keys handled below | |
| 1205 | + case VK_MULTIPLY: return Toolkit.getProperty("AWT.multiply", "NumPad *"); | |
| 1206 | + case VK_ADD: return Toolkit.getProperty("AWT.add", "NumPad +"); | |
| 1207 | + case VK_SEPARATOR: return Toolkit.getProperty("AWT.separator", "NumPad ,"); | |
| 1208 | + case VK_SUBTRACT: return Toolkit.getProperty("AWT.subtract", "NumPad -"); | |
| 1209 | + case VK_DECIMAL: return Toolkit.getProperty("AWT.decimal", "NumPad ."); | |
| 1210 | + case VK_DIVIDE: return Toolkit.getProperty("AWT.divide", "NumPad /"); | |
| 1211 | + case VK_DELETE: return Toolkit.getProperty("AWT.delete", "Delete"); | |
| 1212 | + case VK_NUM_LOCK: return Toolkit.getProperty("AWT.numLock", "Num Lock"); | |
| 1213 | + case VK_SCROLL_LOCK: return Toolkit.getProperty("AWT.scrollLock", "Scroll Lock"); | |
| 1214 | + | |
| 1215 | + case VK_WINDOWS: return Toolkit.getProperty("AWT.windows", "Windows"); | |
| 1216 | + case VK_CONTEXT_MENU: return Toolkit.getProperty("AWT.context", "Context Menu"); | |
| 1217 | + | |
| 1218 | + case VK_F1: return Toolkit.getProperty("AWT.f1", "F1"); | |
| 1219 | + case VK_F2: return Toolkit.getProperty("AWT.f2", "F2"); | |
| 1220 | + case VK_F3: return Toolkit.getProperty("AWT.f3", "F3"); | |
| 1221 | + case VK_F4: return Toolkit.getProperty("AWT.f4", "F4"); | |
| 1222 | + case VK_F5: return Toolkit.getProperty("AWT.f5", "F5"); | |
| 1223 | + case VK_F6: return Toolkit.getProperty("AWT.f6", "F6"); | |
| 1224 | + case VK_F7: return Toolkit.getProperty("AWT.f7", "F7"); | |
| 1225 | + case VK_F8: return Toolkit.getProperty("AWT.f8", "F8"); | |
| 1226 | + case VK_F9: return Toolkit.getProperty("AWT.f9", "F9"); | |
| 1227 | + case VK_F10: return Toolkit.getProperty("AWT.f10", "F10"); | |
| 1228 | + case VK_F11: return Toolkit.getProperty("AWT.f11", "F11"); | |
| 1229 | + case VK_F12: return Toolkit.getProperty("AWT.f12", "F12"); | |
| 1230 | + case VK_F13: return Toolkit.getProperty("AWT.f13", "F13"); | |
| 1231 | + case VK_F14: return Toolkit.getProperty("AWT.f14", "F14"); | |
| 1232 | + case VK_F15: return Toolkit.getProperty("AWT.f15", "F15"); | |
| 1233 | + case VK_F16: return Toolkit.getProperty("AWT.f16", "F16"); | |
| 1234 | + case VK_F17: return Toolkit.getProperty("AWT.f17", "F17"); | |
| 1235 | + case VK_F18: return Toolkit.getProperty("AWT.f18", "F18"); | |
| 1236 | + case VK_F19: return Toolkit.getProperty("AWT.f19", "F19"); | |
| 1237 | + case VK_F20: return Toolkit.getProperty("AWT.f20", "F20"); | |
| 1238 | + case VK_F21: return Toolkit.getProperty("AWT.f21", "F21"); | |
| 1239 | + case VK_F22: return Toolkit.getProperty("AWT.f22", "F22"); | |
| 1240 | + case VK_F23: return Toolkit.getProperty("AWT.f23", "F23"); | |
| 1241 | + case VK_F24: return Toolkit.getProperty("AWT.f24", "F24"); | |
| 1242 | + | |
| 1243 | + case VK_PRINTSCREEN: return Toolkit.getProperty("AWT.printScreen", "Print Screen"); | |
| 1244 | + case VK_INSERT: return Toolkit.getProperty("AWT.insert", "Insert"); | |
| 1245 | + case VK_HELP: return Toolkit.getProperty("AWT.help", "Help"); | |
| 1246 | + case VK_BACK_QUOTE: return Toolkit.getProperty("AWT.backQuote", "Back Quote"); | |
| 1247 | + case VK_QUOTE: return Toolkit.getProperty("AWT.quote", "Quote"); | |
| 1248 | + | |
| 1249 | + case VK_KP_UP: return Toolkit.getProperty("AWT.up", "Up"); | |
| 1250 | + case VK_KP_DOWN: return Toolkit.getProperty("AWT.down", "Down"); | |
| 1251 | + case VK_KP_LEFT: return Toolkit.getProperty("AWT.left", "Left"); | |
| 1252 | + case VK_KP_RIGHT: return Toolkit.getProperty("AWT.right", "Right"); | |
| 1253 | + | |
| 1254 | + case VK_DEAD_GRAVE: return Toolkit.getProperty("AWT.deadGrave", "Dead Grave"); | |
| 1255 | + case VK_DEAD_ACUTE: return Toolkit.getProperty("AWT.deadAcute", "Dead Acute"); | |
| 1256 | + case VK_DEAD_CIRCUMFLEX: return Toolkit.getProperty("AWT.deadCircumflex", "Dead Circumflex"); | |
| 1257 | + case VK_DEAD_TILDE: return Toolkit.getProperty("AWT.deadTilde", "Dead Tilde"); | |
| 1258 | + case VK_DEAD_MACRON: return Toolkit.getProperty("AWT.deadMacron", "Dead Macron"); | |
| 1259 | + case VK_DEAD_BREVE: return Toolkit.getProperty("AWT.deadBreve", "Dead Breve"); | |
| 1260 | + case VK_DEAD_ABOVEDOT: return Toolkit.getProperty("AWT.deadAboveDot", "Dead Above Dot"); | |
| 1261 | + case VK_DEAD_DIAERESIS: return Toolkit.getProperty("AWT.deadDiaeresis", "Dead Diaeresis"); | |
| 1262 | + case VK_DEAD_ABOVERING: return Toolkit.getProperty("AWT.deadAboveRing", "Dead Above Ring"); | |
| 1263 | + case VK_DEAD_DOUBLEACUTE: return Toolkit.getProperty("AWT.deadDoubleAcute", "Dead Double Acute"); | |
| 1264 | + case VK_DEAD_CARON: return Toolkit.getProperty("AWT.deadCaron", "Dead Caron"); | |
| 1265 | + case VK_DEAD_CEDILLA: return Toolkit.getProperty("AWT.deadCedilla", "Dead Cedilla"); | |
| 1266 | + case VK_DEAD_OGONEK: return Toolkit.getProperty("AWT.deadOgonek", "Dead Ogonek"); | |
| 1267 | + case VK_DEAD_IOTA: return Toolkit.getProperty("AWT.deadIota", "Dead Iota"); | |
| 1268 | + case VK_DEAD_VOICED_SOUND: return Toolkit.getProperty("AWT.deadVoicedSound", "Dead Voiced Sound"); | |
| 1269 | + case VK_DEAD_SEMIVOICED_SOUND: return Toolkit.getProperty("AWT.deadSemivoicedSound", "Dead Semivoiced Sound"); | |
| 1270 | + | |
| 1271 | + case VK_AMPERSAND: return Toolkit.getProperty("AWT.ampersand", "Ampersand"); | |
| 1272 | + case VK_ASTERISK: return Toolkit.getProperty("AWT.asterisk", "Asterisk"); | |
| 1273 | + case VK_QUOTEDBL: return Toolkit.getProperty("AWT.quoteDbl", "Double Quote"); | |
| 1274 | + case VK_LESS: return Toolkit.getProperty("AWT.Less", "Less"); | |
| 1275 | + case VK_GREATER: return Toolkit.getProperty("AWT.greater", "Greater"); | |
| 1276 | + case VK_BRACELEFT: return Toolkit.getProperty("AWT.braceLeft", "Left Brace"); | |
| 1277 | + case VK_BRACERIGHT: return Toolkit.getProperty("AWT.braceRight", "Right Brace"); | |
| 1278 | + case VK_AT: return Toolkit.getProperty("AWT.at", "At"); | |
| 1279 | + case VK_COLON: return Toolkit.getProperty("AWT.colon", "Colon"); | |
| 1280 | + case VK_CIRCUMFLEX: return Toolkit.getProperty("AWT.circumflex", "Circumflex"); | |
| 1281 | + case VK_DOLLAR: return Toolkit.getProperty("AWT.dollar", "Dollar"); | |
| 1282 | + case VK_EURO_SIGN: return Toolkit.getProperty("AWT.euro", "Euro"); | |
| 1283 | + case VK_EXCLAMATION_MARK: return Toolkit.getProperty("AWT.exclamationMark", "Exclamation Mark"); | |
| 1284 | + case VK_INVERTED_EXCLAMATION_MARK: return Toolkit.getProperty("AWT.invertedExclamationMark", "Inverted Exclamation Mark"); | |
| 1285 | + case VK_LEFT_PARENTHESIS: return Toolkit.getProperty("AWT.leftParenthesis", "Left Parenthesis"); | |
| 1286 | + case VK_NUMBER_SIGN: return Toolkit.getProperty("AWT.numberSign", "Number Sign"); | |
| 1287 | + case VK_MINUS: return Toolkit.getProperty("AWT.minus", "Minus"); | |
| 1288 | + case VK_PLUS: return Toolkit.getProperty("AWT.plus", "Plus"); | |
| 1289 | + case VK_RIGHT_PARENTHESIS: return Toolkit.getProperty("AWT.rightParenthesis", "Right Parenthesis"); | |
| 1290 | + case VK_UNDERSCORE: return Toolkit.getProperty("AWT.underscore", "Underscore"); | |
| 1291 | + | |
| 1292 | + case VK_FINAL: return Toolkit.getProperty("AWT.final", "Final"); | |
| 1293 | + case VK_CONVERT: return Toolkit.getProperty("AWT.convert", "Convert"); | |
| 1294 | + case VK_NONCONVERT: return Toolkit.getProperty("AWT.noconvert", "No Convert"); | |
| 1295 | + case VK_ACCEPT: return Toolkit.getProperty("AWT.accept", "Accept"); | |
| 1296 | + case VK_MODECHANGE: return Toolkit.getProperty("AWT.modechange", "Mode Change"); | |
| 1297 | + case VK_KANA: return Toolkit.getProperty("AWT.kana", "Kana"); | |
| 1298 | + case VK_KANJI: return Toolkit.getProperty("AWT.kanji", "Kanji"); | |
| 1299 | + case VK_ALPHANUMERIC: return Toolkit.getProperty("AWT.alphanumeric", "Alphanumeric"); | |
| 1300 | + case VK_KATAKANA: return Toolkit.getProperty("AWT.katakana", "Katakana"); | |
| 1301 | + case VK_HIRAGANA: return Toolkit.getProperty("AWT.hiragana", "Hiragana"); | |
| 1302 | + case VK_FULL_WIDTH: return Toolkit.getProperty("AWT.fullWidth", "Full-Width"); | |
| 1303 | + case VK_HALF_WIDTH: return Toolkit.getProperty("AWT.halfWidth", "Half-Width"); | |
| 1304 | + case VK_ROMAN_CHARACTERS: return Toolkit.getProperty("AWT.romanCharacters", "Roman Characters"); | |
| 1305 | + case VK_ALL_CANDIDATES: return Toolkit.getProperty("AWT.allCandidates", "All Candidates"); | |
| 1306 | + case VK_PREVIOUS_CANDIDATE: return Toolkit.getProperty("AWT.previousCandidate", "Previous Candidate"); | |
| 1307 | + case VK_CODE_INPUT: return Toolkit.getProperty("AWT.codeInput", "Code Input"); | |
| 1308 | + case VK_JAPANESE_KATAKANA: return Toolkit.getProperty("AWT.japaneseKatakana", "Japanese Katakana"); | |
| 1309 | + case VK_JAPANESE_HIRAGANA: return Toolkit.getProperty("AWT.japaneseHiragana", "Japanese Hiragana"); | |
| 1310 | + case VK_JAPANESE_ROMAN: return Toolkit.getProperty("AWT.japaneseRoman", "Japanese Roman"); | |
| 1311 | + case VK_KANA_LOCK: return Toolkit.getProperty("AWT.kanaLock", "Kana Lock"); | |
| 1312 | + case VK_INPUT_METHOD_ON_OFF: return Toolkit.getProperty("AWT.inputMethodOnOff", "Input Method On/Off"); | |
| 1313 | + | |
| 1314 | + case VK_AGAIN: return Toolkit.getProperty("AWT.again", "Again"); | |
| 1315 | + case VK_UNDO: return Toolkit.getProperty("AWT.undo", "Undo"); | |
| 1316 | + case VK_COPY: return Toolkit.getProperty("AWT.copy", "Copy"); | |
| 1317 | + case VK_PASTE: return Toolkit.getProperty("AWT.paste", "Paste"); | |
| 1318 | + case VK_CUT: return Toolkit.getProperty("AWT.cut", "Cut"); | |
| 1319 | + case VK_FIND: return Toolkit.getProperty("AWT.find", "Find"); | |
| 1320 | + case VK_PROPS: return Toolkit.getProperty("AWT.props", "Props"); | |
| 1321 | + case VK_STOP: return Toolkit.getProperty("AWT.stop", "Stop"); | |
| 1322 | + } | |
| 1323 | + | |
| 1324 | + if (keyCode >= VK_NUMPAD0 && keyCode <= VK_NUMPAD9) { | |
| 1325 | + String numpad = Toolkit.getProperty("AWT.numpad", "NumPad"); | |
| 1326 | + char c = (char)(keyCode - VK_NUMPAD0 + '0'); | |
| 1327 | + return numpad + "-" + c; | |
| 1328 | + } | |
| 1329 | + | |
| 1330 | + if ((keyCode & 0x01000000) != 0) { | |
| 1331 | + return String.valueOf((char)(keyCode ^ 0x01000000 )); | |
| 1332 | + } | |
| 1333 | + String unknown = Toolkit.getProperty("AWT.unknown", "Unknown"); | |
| 1334 | + return unknown + " keyCode: 0x" + Integer.toString(keyCode, 16); | |
| 1335 | + } | |
| 1336 | + | |
| 1337 | + /** | |
| 1338 | + * Returns a <code>String</code> describing the modifier key(s), | |
| 1339 | + * such as "Shift", or "Ctrl+Shift". These strings can be | |
| 1340 | + * localized by changing the <code>awt.properties</code> file. | |
| 1341 | + * <p> | |
| 1342 | + * Note that <code>InputEvent.ALT_MASK</code> and | |
| 1343 | + * <code>InputEvent.BUTTON2_MASK</code> have the same value, | |
| 1344 | + * so the string "Alt" is returned for both modifiers. Likewise, | |
| 1345 | + * <code>InputEvent.META_MASK</code> and | |
| 1346 | + * <code>InputEvent.BUTTON3_MASK</code> have the same value, | |
| 1347 | + * so the string "Meta" is returned for both modifiers. | |
| 1348 | + * | |
| 1349 | + * @return string a text description of the combination of modifier | |
| 1350 | + * keys that were held down during the event | |
| 1351 | + * @see InputEvent#getModifiersExText(int) | |
| 1352 | + */ | |
| 1353 | + public static String getKeyModifiersText(int modifiers) { | |
| 1354 | + StringBuilder buf = new StringBuilder(); | |
| 1355 | + if ((modifiers & InputEvent.META_MASK) != 0) { | |
| 1356 | + buf.append(Toolkit.getProperty("AWT.meta", "Meta")); | |
| 1357 | + buf.append("+"); | |
| 1358 | + } | |
| 1359 | + if ((modifiers & InputEvent.CTRL_MASK) != 0) { | |
| 1360 | + buf.append(Toolkit.getProperty("AWT.control", "Ctrl")); | |
| 1361 | + buf.append("+"); | |
| 1362 | + } | |
| 1363 | + if ((modifiers & InputEvent.ALT_MASK) != 0) { | |
| 1364 | + buf.append(Toolkit.getProperty("AWT.alt", "Alt")); | |
| 1365 | + buf.append("+"); | |
| 1366 | + } | |
| 1367 | + if ((modifiers & InputEvent.SHIFT_MASK) != 0) { | |
| 1368 | + buf.append(Toolkit.getProperty("AWT.shift", "Shift")); | |
| 1369 | + buf.append("+"); | |
| 1370 | + } | |
| 1371 | + if ((modifiers & InputEvent.ALT_GRAPH_MASK) != 0) { | |
| 1372 | + buf.append(Toolkit.getProperty("AWT.altGraph", "Alt Graph")); | |
| 1373 | + buf.append("+"); | |
| 1374 | + } | |
| 1375 | + if ((modifiers & InputEvent.BUTTON1_MASK) != 0) { | |
| 1376 | + buf.append(Toolkit.getProperty("AWT.button1", "Button1")); | |
| 1377 | + buf.append("+"); | |
| 1378 | + } | |
| 1379 | + if (buf.length() > 0) { | |
| 1380 | + buf.setLength(buf.length()-1); // remove trailing '+' | |
| 1381 | + } | |
| 1382 | + return buf.toString(); | |
| 1383 | + } | |
| 1384 | + | |
| 1385 | + | |
| 1386 | + /** | |
| 1387 | + * Returns whether the key in this event is an "action" key. | |
| 1388 | + * Typically an action key does not fire a unicode character and is | |
| 1389 | + * not a modifier key. | |
| 1390 | + * | |
| 1391 | + * @return <code>true</code> if the key is an "action" key, | |
| 1392 | + * <code>false</code> otherwise | |
| 1393 | + */ | |
| 1394 | + public boolean isActionKey() { | |
| 1395 | + switch (keyCode) { | |
| 1396 | + case VK_HOME: | |
| 1397 | + case VK_END: | |
| 1398 | + case VK_PAGE_UP: | |
| 1399 | + case VK_PAGE_DOWN: | |
| 1400 | + case VK_UP: | |
| 1401 | + case VK_DOWN: | |
| 1402 | + case VK_LEFT: | |
| 1403 | + case VK_RIGHT: | |
| 1404 | + case VK_BEGIN: | |
| 1405 | + | |
| 1406 | + case VK_KP_LEFT: | |
| 1407 | + case VK_KP_UP: | |
| 1408 | + case VK_KP_RIGHT: | |
| 1409 | + case VK_KP_DOWN: | |
| 1410 | + | |
| 1411 | + case VK_F1: | |
| 1412 | + case VK_F2: | |
| 1413 | + case VK_F3: | |
| 1414 | + case VK_F4: | |
| 1415 | + case VK_F5: | |
| 1416 | + case VK_F6: | |
| 1417 | + case VK_F7: | |
| 1418 | + case VK_F8: | |
| 1419 | + case VK_F9: | |
| 1420 | + case VK_F10: | |
| 1421 | + case VK_F11: | |
| 1422 | + case VK_F12: | |
| 1423 | + case VK_F13: | |
| 1424 | + case VK_F14: | |
| 1425 | + case VK_F15: | |
| 1426 | + case VK_F16: | |
| 1427 | + case VK_F17: | |
| 1428 | + case VK_F18: | |
| 1429 | + case VK_F19: | |
| 1430 | + case VK_F20: | |
| 1431 | + case VK_F21: | |
| 1432 | + case VK_F22: | |
| 1433 | + case VK_F23: | |
| 1434 | + case VK_F24: | |
| 1435 | + case VK_PRINTSCREEN: | |
| 1436 | + case VK_SCROLL_LOCK: | |
| 1437 | + case VK_CAPS_LOCK: | |
| 1438 | + case VK_NUM_LOCK: | |
| 1439 | + case VK_PAUSE: | |
| 1440 | + case VK_INSERT: | |
| 1441 | + | |
| 1442 | + case VK_FINAL: | |
| 1443 | + case VK_CONVERT: | |
| 1444 | + case VK_NONCONVERT: | |
| 1445 | + case VK_ACCEPT: | |
| 1446 | + case VK_MODECHANGE: | |
| 1447 | + case VK_KANA: | |
| 1448 | + case VK_KANJI: | |
| 1449 | + case VK_ALPHANUMERIC: | |
| 1450 | + case VK_KATAKANA: | |
| 1451 | + case VK_HIRAGANA: | |
| 1452 | + case VK_FULL_WIDTH: | |
| 1453 | + case VK_HALF_WIDTH: | |
| 1454 | + case VK_ROMAN_CHARACTERS: | |
| 1455 | + case VK_ALL_CANDIDATES: | |
| 1456 | + case VK_PREVIOUS_CANDIDATE: | |
| 1457 | + case VK_CODE_INPUT: | |
| 1458 | + case VK_JAPANESE_KATAKANA: | |
| 1459 | + case VK_JAPANESE_HIRAGANA: | |
| 1460 | + case VK_JAPANESE_ROMAN: | |
| 1461 | + case VK_KANA_LOCK: | |
| 1462 | + case VK_INPUT_METHOD_ON_OFF: | |
| 1463 | + | |
| 1464 | + case VK_AGAIN: | |
| 1465 | + case VK_UNDO: | |
| 1466 | + case VK_COPY: | |
| 1467 | + case VK_PASTE: | |
| 1468 | + case VK_CUT: | |
| 1469 | + case VK_FIND: | |
| 1470 | + case VK_PROPS: | |
| 1471 | + case VK_STOP: | |
| 1472 | + | |
| 1473 | + case VK_HELP: | |
| 1474 | + case VK_WINDOWS: | |
| 1475 | + case VK_CONTEXT_MENU: | |
| 1476 | + return true; | |
| 1477 | + } | |
| 1478 | + return false; | |
| 1479 | + } | |
| 1480 | + | |
| 1481 | + /** | |
| 1482 | + * Returns a parameter string identifying this event. | |
| 1483 | + * This method is useful for event logging and for debugging. | |
| 1484 | + * | |
| 1485 | + * @return a string identifying the event and its attributes | |
| 1486 | + */ | |
| 1487 | + public String paramString() { | |
| 1488 | + StringBuilder str = new StringBuilder(100); | |
| 1489 | + | |
| 1490 | + switch (id) { | |
| 1491 | + case KEY_PRESSED: | |
| 1492 | + str.append("KEY_PRESSED"); | |
| 1493 | + break; | |
| 1494 | + case KEY_RELEASED: | |
| 1495 | + str.append("KEY_RELEASED"); | |
| 1496 | + break; | |
| 1497 | + case KEY_TYPED: | |
| 1498 | + str.append("KEY_TYPED"); | |
| 1499 | + break; | |
| 1500 | + default: | |
| 1501 | + str.append("unknown type"); | |
| 1502 | + break; | |
| 1503 | + } | |
| 1504 | + | |
| 1505 | + str.append(",keyCode=").append(keyCode); | |
| 1506 | + str.append(",keyText=").append(getKeyText(keyCode)); | |
| 1507 | + | |
| 1508 | + /* Some keychars don't print well, e.g. escape, backspace, | |
| 1509 | + * tab, return, delete, cancel. Get keyText for the keyCode | |
| 1510 | + * instead of the keyChar. | |
| 1511 | + */ | |
| 1512 | + str.append(",keyChar="); | |
| 1513 | + switch (keyChar) { | |
| 1514 | + case '\b': | |
| 1515 | + str.append(getKeyText(VK_BACK_SPACE)); | |
| 1516 | + break; | |
| 1517 | + case '\t': | |
| 1518 | + str.append(getKeyText(VK_TAB)); | |
| 1519 | + break; | |
| 1520 | + case '\n': | |
| 1521 | + str.append(getKeyText(VK_ENTER)); | |
| 1522 | + break; | |
| 1523 | + case '\u0018': | |
| 1524 | + str.append(getKeyText(VK_CANCEL)); | |
| 1525 | + break; | |
| 1526 | + case '\u001b': | |
| 1527 | + str.append(getKeyText(VK_ESCAPE)); | |
| 1528 | + break; | |
| 1529 | + case '\u007f': | |
| 1530 | + str.append(getKeyText(VK_DELETE)); | |
| 1531 | + break; | |
| 1532 | + case CHAR_UNDEFINED: | |
| 1533 | + str.append(Toolkit.getProperty("AWT.undefined", "Undefined")); | |
| 1534 | + str.append(" keyChar"); | |
| 1535 | + break; | |
| 1536 | + default: | |
| 1537 | + str.append("'").append(keyChar).append("'"); | |
| 1538 | + break; | |
| 1539 | + } | |
| 1540 | + | |
| 1541 | + if (getModifiers() != 0) { | |
| 1542 | + str.append(",modifiers=").append(getKeyModifiersText(modifiers)); | |
| 1543 | + } | |
| 1544 | + if (getModifiersEx() != 0) { | |
| 1545 | + str.append(",extModifiers=").append(getModifiersExText(modifiers)); | |
| 1546 | + } | |
| 1547 | + | |
| 1548 | + str.append(",keyLocation="); | |
| 1549 | + switch (keyLocation) { | |
| 1550 | + case KEY_LOCATION_UNKNOWN: | |
| 1551 | + str.append("KEY_LOCATION_UNKNOWN"); | |
| 1552 | + break; | |
| 1553 | + case KEY_LOCATION_STANDARD: | |
| 1554 | + str.append("KEY_LOCATION_STANDARD"); | |
| 1555 | + break; | |
| 1556 | + case KEY_LOCATION_LEFT: | |
| 1557 | + str.append("KEY_LOCATION_LEFT"); | |
| 1558 | + break; | |
| 1559 | + case KEY_LOCATION_RIGHT: | |
| 1560 | + str.append("KEY_LOCATION_RIGHT"); | |
| 1561 | + break; | |
| 1562 | + case KEY_LOCATION_NUMPAD: | |
| 1563 | + str.append("KEY_LOCATION_NUMPAD"); | |
| 1564 | + break; | |
| 1565 | + default: | |
| 1566 | + str.append("KEY_LOCATION_UNKNOWN"); | |
| 1567 | + break; | |
| 1568 | + } | |
| 1569 | + str.append(",rawCode=").append(rawCode); | |
| 1570 | + str.append(",primaryLevelUnicode=").append(primaryLevelUnicode); | |
| 1571 | + str.append(",scancode=").append(scancode); | |
| 1572 | + str.append(",extendedKeyCode=0x").append(Long.toHexString(extendedKeyCode)); | |
| 1573 | + | |
| 1574 | + return str.toString(); | |
| 1575 | + } | |
| 1576 | + /** | |
| 1577 | + * Returns an extended key code for the event. | |
| 1578 | + * The extended key code is a unique id assigned to a key on the keyboard | |
| 1579 | + * just like {@code keyCode}. However, unlike {@code keyCode}, this value depends on the | |
| 1580 | + * current keyboard layout. For instance, pressing the left topmost letter key | |
| 1581 | + * in a common English layout produces the same value as {@code keyCode}, {@code VK_Q}. | |
| 1582 | + * Pressing the same key in a regular Russian layout gives another code, unique for the | |
| 1583 | + * letter "Cyrillic I short". | |
| 1584 | + * | |
| 1585 | + * @since 1.7 | |
| 1586 | + * | |
| 1587 | + */ | |
| 1588 | + public int getExtendedKeyCode() { | |
| 1589 | + return (int)extendedKeyCode; | |
| 1590 | + } | |
| 1591 | + /** | |
| 1592 | + * Returns an extended key code for a unicode character. | |
| 1593 | + * | |
| 1594 | + * @return for a unicode character with a corresponding {@code VK_} constant -- this | |
| 1595 | + * {@code VK_} constant; for a character appearing on the primary | |
| 1596 | + * level of a known keyboard layout -- a unique integer. | |
| 1597 | + * If a character does not appear on the primary level of a known keyboard, | |
| 1598 | + * {@code VK_UNDEFINED} is returned. | |
| 1599 | + * | |
| 1600 | + * @since 1.7 | |
| 1601 | + * | |
| 1602 | + */ | |
| 1603 | + public static int getExtendedKeyCodeForChar(int c) { | |
| 1604 | + // Return a keycode (if any) associated with a character. | |
| 1605 | + return sun.awt.ExtendedKeyCodes.getExtendedKeyCodeForChar(c); | |
| 1606 | + } | |
| 1607 | + | |
| 1608 | + /** | |
| 1609 | + * Sets new modifiers by the old ones. The key modifiers | |
| 1610 | + * override overlaping mouse modifiers. | |
| 1611 | + */ | |
| 1612 | + private void setNewModifiers() { | |
| 1613 | + if ((modifiers & SHIFT_MASK) != 0) { | |
| 1614 | + modifiers |= SHIFT_DOWN_MASK; | |
| 1615 | + } | |
| 1616 | + if ((modifiers & ALT_MASK) != 0) { | |
| 1617 | + modifiers |= ALT_DOWN_MASK; | |
| 1618 | + } | |
| 1619 | + if ((modifiers & CTRL_MASK) != 0) { | |
| 1620 | + modifiers |= CTRL_DOWN_MASK; | |
| 1621 | + } | |
| 1622 | + if ((modifiers & META_MASK) != 0) { | |
| 1623 | + modifiers |= META_DOWN_MASK; | |
| 1624 | + } | |
| 1625 | + if ((modifiers & ALT_GRAPH_MASK) != 0) { | |
| 1626 | + modifiers |= ALT_GRAPH_DOWN_MASK; | |
| 1627 | + } | |
| 1628 | + if ((modifiers & BUTTON1_MASK) != 0) { | |
| 1629 | + modifiers |= BUTTON1_DOWN_MASK; | |
| 1630 | + } | |
| 1631 | + } | |
| 1632 | + | |
| 1633 | + /** | |
| 1634 | + * Sets old modifiers by the new ones. | |
| 1635 | + */ | |
| 1636 | + private void setOldModifiers() { | |
| 1637 | + if ((modifiers & SHIFT_DOWN_MASK) != 0) { | |
| 1638 | + modifiers |= SHIFT_MASK; | |
| 1639 | + } | |
| 1640 | + if ((modifiers & ALT_DOWN_MASK) != 0) { | |
| 1641 | + modifiers |= ALT_MASK; | |
| 1642 | + } | |
| 1643 | + if ((modifiers & CTRL_DOWN_MASK) != 0) { | |
| 1644 | + modifiers |= CTRL_MASK; | |
| 1645 | + } | |
| 1646 | + if ((modifiers & META_DOWN_MASK) != 0) { | |
| 1647 | + modifiers |= META_MASK; | |
| 1648 | + } | |
| 1649 | + if ((modifiers & ALT_GRAPH_DOWN_MASK) != 0) { | |
| 1650 | + modifiers |= ALT_GRAPH_MASK; | |
| 1651 | + } | |
| 1652 | + if ((modifiers & BUTTON1_DOWN_MASK) != 0) { | |
| 1653 | + modifiers |= BUTTON1_MASK; | |
| 1654 | + } | |
| 1655 | + } | |
| 1656 | + | |
| 1657 | + /** | |
| 1658 | + * Sets new modifiers by the old ones. The key modifiers | |
| 1659 | + * override overlaping mouse modifiers. | |
| 1660 | + * @serial | |
| 1661 | + */ | |
| 1662 | + private void readObject(ObjectInputStream s) | |
| 1663 | + throws IOException, ClassNotFoundException { | |
| 1664 | + s.defaultReadObject(); | |
| 1665 | + if (getModifiers() != 0 && getModifiersEx() == 0) { | |
| 1666 | + setNewModifiers(); | |
| 1667 | + } | |
| 1668 | + } | |
| 1669 | +} | |
Binary file not shown.
| @@ -0,0 +1,73 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListener; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * The listener interface for receiving keyboard events (keystrokes). | |
| 32 | + * The class that is interested in processing a keyboard event | |
| 33 | + * either implements this interface (and all the methods it | |
| 34 | + * contains) or extends the abstract <code>KeyAdapter</code> class | |
| 35 | + * (overriding only the methods of interest). | |
| 36 | + * <P> | |
| 37 | + * The listener object created from that class is then registered with a | |
| 38 | + * component using the component's <code>addKeyListener</code> | |
| 39 | + * method. A keyboard event is generated when a key is pressed, released, | |
| 40 | + * or typed. The relevant method in the listener | |
| 41 | + * object is then invoked, and the <code>KeyEvent</code> is passed to it. | |
| 42 | + * | |
| 43 | + * @author Carl Quinn | |
| 44 | + * | |
| 45 | + * @see KeyAdapter | |
| 46 | + * @see KeyEvent | |
| 47 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/keylistener.html">Tutorial: Writing a Key Listener</a> | |
| 48 | + * | |
| 49 | + * @since 1.1 | |
| 50 | + */ | |
| 51 | +public interface KeyListener extends EventListener { | |
| 52 | + | |
| 53 | + /** | |
| 54 | + * Invoked when a key has been typed. | |
| 55 | + * See the class description for {@link KeyEvent} for a definition of | |
| 56 | + * a key typed event. | |
| 57 | + */ | |
| 58 | + public void keyTyped(KeyEvent e); | |
| 59 | + | |
| 60 | + /** | |
| 61 | + * Invoked when a key has been pressed. | |
| 62 | + * See the class description for {@link KeyEvent} for a definition of | |
| 63 | + * a key pressed event. | |
| 64 | + */ | |
| 65 | + public void keyPressed(KeyEvent e); | |
| 66 | + | |
| 67 | + /** | |
| 68 | + * Invoked when a key has been released. | |
| 69 | + * See the class description for {@link KeyEvent} for a definition of | |
| 70 | + * a key released event. | |
| 71 | + */ | |
| 72 | + public void keyReleased(KeyEvent e); | |
| 73 | +} | |
Binary file not shown.
| @@ -0,0 +1,113 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +/** | |
| 29 | + * An abstract adapter class for receiving mouse events. | |
| 30 | + * The methods in this class are empty. This class exists as | |
| 31 | + * convenience for creating listener objects. | |
| 32 | + * <P> | |
| 33 | + * Mouse events let you track when a mouse is pressed, released, clicked, | |
| 34 | + * moved, dragged, when it enters a component, when it exits and | |
| 35 | + * when a mouse wheel is moved. | |
| 36 | + * <P> | |
| 37 | + * Extend this class to create a {@code MouseEvent} | |
| 38 | + * (including drag and motion events) or/and {@code MouseWheelEvent} | |
| 39 | + * listener and override the methods for the events of interest. (If you implement the | |
| 40 | + * {@code MouseListener}, | |
| 41 | + * {@code MouseMotionListener} | |
| 42 | + * interface, you have to define all of | |
| 43 | + * the methods in it. This abstract class defines null methods for them | |
| 44 | + * all, so you can only have to define methods for events you care about.) | |
| 45 | + * <P> | |
| 46 | + * Create a listener object using the extended class and then register it with | |
| 47 | + * a component using the component's {@code addMouseListener} | |
| 48 | + * {@code addMouseMotionListener}, {@code addMouseWheelListener} | |
| 49 | + * methods. | |
| 50 | + * The relevant method in the listener object is invoked and the {@code MouseEvent} | |
| 51 | + * or {@code MouseWheelEvent} is passed to it in following cases: | |
| 52 | + * <p><ul> | |
| 53 | + * <li>when a mouse button is pressed, released, or clicked (pressed and released) | |
| 54 | + * <li>when the mouse cursor enters or exits the component | |
| 55 | + * <li>when the mouse wheel rotated, or mouse moved or dragged | |
| 56 | + * </ul> | |
| 57 | + * | |
| 58 | + * @author Carl Quinn | |
| 59 | + * @author Andrei Dmitriev | |
| 60 | + * | |
| 61 | + * @see MouseEvent | |
| 62 | + * @see MouseWheelEvent | |
| 63 | + * @see MouseListener | |
| 64 | + * @see MouseMotionListener | |
| 65 | + * @see MouseWheelListener | |
| 66 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/mouselistener.html">Tutorial: Writing a Mouse Listener</a> | |
| 67 | + * | |
| 68 | + * @since 1.1 | |
| 69 | + */ | |
| 70 | +public abstract class MouseAdapter implements MouseListener, MouseWheelListener, MouseMotionListener { | |
| 71 | + /** | |
| 72 | + * {@inheritDoc} | |
| 73 | + */ | |
| 74 | + public void mouseClicked(MouseEvent e) {} | |
| 75 | + | |
| 76 | + /** | |
| 77 | + * {@inheritDoc} | |
| 78 | + */ | |
| 79 | + public void mousePressed(MouseEvent e) {} | |
| 80 | + | |
| 81 | + /** | |
| 82 | + * {@inheritDoc} | |
| 83 | + */ | |
| 84 | + public void mouseReleased(MouseEvent e) {} | |
| 85 | + | |
| 86 | + /** | |
| 87 | + * {@inheritDoc} | |
| 88 | + */ | |
| 89 | + public void mouseEntered(MouseEvent e) {} | |
| 90 | + | |
| 91 | + /** | |
| 92 | + * {@inheritDoc} | |
| 93 | + */ | |
| 94 | + public void mouseExited(MouseEvent e) {} | |
| 95 | + | |
| 96 | + /** | |
| 97 | + * {@inheritDoc} | |
| 98 | + * @since 1.6 | |
| 99 | + */ | |
| 100 | + public void mouseWheelMoved(MouseWheelEvent e){} | |
| 101 | + | |
| 102 | + /** | |
| 103 | + * {@inheritDoc} | |
| 104 | + * @since 1.6 | |
| 105 | + */ | |
| 106 | + public void mouseDragged(MouseEvent e){} | |
| 107 | + | |
| 108 | + /** | |
| 109 | + * {@inheritDoc} | |
| 110 | + * @since 1.6 | |
| 111 | + */ | |
| 112 | + public void mouseMoved(MouseEvent e){} | |
| 113 | +} | |
Binary file not shown.
| @@ -0,0 +1,1171 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.awt.Component; | |
| 29 | +import java.awt.GraphicsEnvironment; | |
| 30 | +import java.awt.Point; | |
| 31 | +import java.awt.Toolkit; | |
| 32 | +import java.io.IOException; | |
| 33 | +import java.io.ObjectInputStream; | |
| 34 | +import java.awt.IllegalComponentStateException; | |
| 35 | +import java.awt.MouseInfo; | |
| 36 | +import sun.awt.SunToolkit; | |
| 37 | + | |
| 38 | +/** | |
| 39 | + * An event which indicates that a mouse action occurred in a component. | |
| 40 | + * A mouse action is considered to occur in a particular component if and only | |
| 41 | + * if the mouse cursor is over the unobscured part of the component's bounds | |
| 42 | + * when the action happens. | |
| 43 | + * For lightweight components, such as Swing's components, mouse events | |
| 44 | + * are only dispatched to the component if the mouse event type has been | |
| 45 | + * enabled on the component. A mouse event type is enabled by adding the | |
| 46 | + * appropriate mouse-based {@code EventListener} to the component | |
| 47 | + * ({@link MouseListener} or {@link MouseMotionListener}), or by invoking | |
| 48 | + * {@link Component#enableEvents(long)} with the appropriate mask parameter | |
| 49 | + * ({@code AWTEvent.MOUSE_EVENT_MASK} or {@code AWTEvent.MOUSE_MOTION_EVENT_MASK}). | |
| 50 | + * If the mouse event type has not been enabled on the component, the | |
| 51 | + * corresponding mouse events are dispatched to the first ancestor that | |
| 52 | + * has enabled the mouse event type. | |
| 53 | + *<p> | |
| 54 | + * For example, if a {@code MouseListener} has been added to a component, or | |
| 55 | + * {@code enableEvents(AWTEvent.MOUSE_EVENT_MASK)} has been invoked, then all | |
| 56 | + * the events defined by {@code MouseListener} are dispatched to the component. | |
| 57 | + * On the other hand, if a {@code MouseMotionListener} has not been added and | |
| 58 | + * {@code enableEvents} has not been invoked with | |
| 59 | + * {@code AWTEvent.MOUSE_MOTION_EVENT_MASK}, then mouse motion events are not | |
| 60 | + * dispatched to the component. Instead the mouse motion events are | |
| 61 | + * dispatched to the first ancestors that has enabled mouse motion | |
| 62 | + * events. | |
| 63 | + * <P> | |
| 64 | + * This low-level event is generated by a component object for: | |
| 65 | + * <ul> | |
| 66 | + * <li>Mouse Events | |
| 67 | + * <ul> | |
| 68 | + * <li>a mouse button is pressed | |
| 69 | + * <li>a mouse button is released | |
| 70 | + * <li>a mouse button is clicked (pressed and released) | |
| 71 | + * <li>the mouse cursor enters the unobscured part of component's geometry | |
| 72 | + * <li>the mouse cursor exits the unobscured part of component's geometry | |
| 73 | + * </ul> | |
| 74 | + * <li> Mouse Motion Events | |
| 75 | + * <ul> | |
| 76 | + * <li>the mouse is moved | |
| 77 | + * <li>the mouse is dragged | |
| 78 | + * </ul> | |
| 79 | + * </ul> | |
| 80 | + * <P> | |
| 81 | + * A <code>MouseEvent</code> object is passed to every | |
| 82 | + * <code>MouseListener</code> | |
| 83 | + * or <code>MouseAdapter</code> object which is registered to receive | |
| 84 | + * the "interesting" mouse events using the component's | |
| 85 | + * <code>addMouseListener</code> method. | |
| 86 | + * (<code>MouseAdapter</code> objects implement the | |
| 87 | + * <code>MouseListener</code> interface.) Each such listener object | |
| 88 | + * gets a <code>MouseEvent</code> containing the mouse event. | |
| 89 | + * <P> | |
| 90 | + * A <code>MouseEvent</code> object is also passed to every | |
| 91 | + * <code>MouseMotionListener</code> or | |
| 92 | + * <code>MouseMotionAdapter</code> object which is registered to receive | |
| 93 | + * mouse motion events using the component's | |
| 94 | + * <code>addMouseMotionListener</code> | |
| 95 | + * method. (<code>MouseMotionAdapter</code> objects implement the | |
| 96 | + * <code>MouseMotionListener</code> interface.) Each such listener object | |
| 97 | + * gets a <code>MouseEvent</code> containing the mouse motion event. | |
| 98 | + * <P> | |
| 99 | + * When a mouse button is clicked, events are generated and sent to the | |
| 100 | + * registered <code>MouseListener</code>s. | |
| 101 | + * The state of modal keys can be retrieved using {@link InputEvent#getModifiers} | |
| 102 | + * and {@link InputEvent#getModifiersEx}. | |
| 103 | + * The button mask returned by {@link InputEvent#getModifiers} reflects | |
| 104 | + * only the button that changed state, not the current state of all buttons. | |
| 105 | + * (Note: Due to overlap in the values of ALT_MASK/BUTTON2_MASK and | |
| 106 | + * META_MASK/BUTTON3_MASK, this is not always true for mouse events involving | |
| 107 | + * modifier keys). | |
| 108 | + * To get the state of all buttons and modifier keys, use | |
| 109 | + * {@link InputEvent#getModifiersEx}. | |
| 110 | + * The button which has changed state is returned by {@link MouseEvent#getButton} | |
| 111 | + * <P> | |
| 112 | + * For example, if the first mouse button is pressed, events are sent in the | |
| 113 | + * following order: | |
| 114 | + * <PRE> | |
| 115 | + * <b >id </b > <b >modifiers </b > <b >button </b > | |
| 116 | + * <code>MOUSE_PRESSED</code>: <code>BUTTON1_MASK</code> <code>BUTTON1</code> | |
| 117 | + * <code>MOUSE_RELEASED</code>: <code>BUTTON1_MASK</code> <code>BUTTON1</code> | |
| 118 | + * <code>MOUSE_CLICKED</code>: <code>BUTTON1_MASK</code> <code>BUTTON1</code> | |
| 119 | + * </PRE> | |
| 120 | + * When multiple mouse buttons are pressed, each press, release, and click | |
| 121 | + * results in a separate event. | |
| 122 | + * <P> | |
| 123 | + * For example, if the user presses <b>button 1</b> followed by | |
| 124 | + * <b>button 2</b>, and then releases them in the same order, | |
| 125 | + * the following sequence of events is generated: | |
| 126 | + * <PRE> | |
| 127 | + * <b >id </b > <b >modifiers </b > <b >button </b > | |
| 128 | + * <code>MOUSE_PRESSED</code>: <code>BUTTON1_MASK</code> <code>BUTTON1</code> | |
| 129 | + * <code>MOUSE_PRESSED</code>: <code>BUTTON2_MASK</code> <code>BUTTON2</code> | |
| 130 | + * <code>MOUSE_RELEASED</code>: <code>BUTTON1_MASK</code> <code>BUTTON1</code> | |
| 131 | + * <code>MOUSE_CLICKED</code>: <code>BUTTON1_MASK</code> <code>BUTTON1</code> | |
| 132 | + * <code>MOUSE_RELEASED</code>: <code>BUTTON2_MASK</code> <code>BUTTON2</code> | |
| 133 | + * <code>MOUSE_CLICKED</code>: <code>BUTTON2_MASK</code> <code>BUTTON2</code> | |
| 134 | + * </PRE> | |
| 135 | + * If <b>button 2</b> is released first, the | |
| 136 | + * <code>MOUSE_RELEASED</code>/<code>MOUSE_CLICKED</code> pair | |
| 137 | + * for <code>BUTTON2_MASK</code> arrives first, | |
| 138 | + * followed by the pair for <code>BUTTON1_MASK</code>. | |
| 139 | + * <p> | |
| 140 | + * Some extra mouse buttons are added to extend the standard set of buttons | |
| 141 | + * represented by the following constants:{@code BUTTON1}, {@code BUTTON2}, and {@code BUTTON3}. | |
| 142 | + * Extra buttons have no assigned {@code BUTTONx} | |
| 143 | + * constants as well as their button masks have no assigned {@code BUTTONx_DOWN_MASK} | |
| 144 | + * constants. Nevertheless, ordinal numbers starting from 4 may be | |
| 145 | + * used as button numbers (button ids). Values obtained by the | |
| 146 | + * {@link InputEvent#getMaskForButton(int) getMaskForButton(button)} method may be used | |
| 147 | + * as button masks. | |
| 148 | + * <p> | |
| 149 | + * <code>MOUSE_DRAGGED</code> events are delivered to the <code>Component</code> | |
| 150 | + * in which the mouse button was pressed until the mouse button is released | |
| 151 | + * (regardless of whether the mouse position is within the bounds of the | |
| 152 | + * <code>Component</code>). Due to platform-dependent Drag&Drop implementations, | |
| 153 | + * <code>MOUSE_DRAGGED</code> events may not be delivered during a native | |
| 154 | + * Drag&Drop operation. | |
| 155 | + * | |
| 156 | + * In a multi-screen environment mouse drag events are delivered to the | |
| 157 | + * <code>Component</code> even if the mouse position is outside the bounds of the | |
| 158 | + * <code>GraphicsConfiguration</code> associated with that | |
| 159 | + * <code>Component</code>. However, the reported position for mouse drag events | |
| 160 | + * in this case may differ from the actual mouse position: | |
| 161 | + * <ul> | |
| 162 | + * <li>In a multi-screen environment without a virtual device: | |
| 163 | + * <br> | |
| 164 | + * The reported coordinates for mouse drag events are clipped to fit within the | |
| 165 | + * bounds of the <code>GraphicsConfiguration</code> associated with | |
| 166 | + * the <code>Component</code>. | |
| 167 | + * <li>In a multi-screen environment with a virtual device: | |
| 168 | + * <br> | |
| 169 | + * The reported coordinates for mouse drag events are clipped to fit within the | |
| 170 | + * bounds of the virtual device associated with the <code>Component</code>. | |
| 171 | + * </ul> | |
| 172 | + * <p> | |
| 173 | + * An unspecified behavior will be caused if the {@code id} parameter | |
| 174 | + * of any particular {@code MouseEvent} instance is not | |
| 175 | + * in the range from {@code MOUSE_FIRST} to {@code MOUSE_LAST}-1 | |
| 176 | + * ({@code MOUSE_WHEEL} is not acceptable). | |
| 177 | + * | |
| 178 | + * @author Carl Quinn | |
| 179 | + * | |
| 180 | + * @see MouseAdapter | |
| 181 | + * @see MouseListener | |
| 182 | + * @see MouseMotionAdapter | |
| 183 | + * @see MouseMotionListener | |
| 184 | + * @see MouseWheelListener | |
| 185 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/mouselistener.html">Tutorial: Writing a Mouse Listener</a> | |
| 186 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/mousemotionlistener.html">Tutorial: Writing a Mouse Motion Listener</a> | |
| 187 | + * | |
| 188 | + * @since 1.1 | |
| 189 | + */ | |
| 190 | +public class MouseEvent extends InputEvent { | |
| 191 | + | |
| 192 | + /** | |
| 193 | + * The first number in the range of ids used for mouse events. | |
| 194 | + */ | |
| 195 | + public static final int MOUSE_FIRST = 500; | |
| 196 | + | |
| 197 | + /** | |
| 198 | + * The last number in the range of ids used for mouse events. | |
| 199 | + */ | |
| 200 | + public static final int MOUSE_LAST = 507; | |
| 201 | + | |
| 202 | + /** | |
| 203 | + * The "mouse clicked" event. This <code>MouseEvent</code> | |
| 204 | + * occurs when a mouse button is pressed and released. | |
| 205 | + */ | |
| 206 | + public static final int MOUSE_CLICKED = MOUSE_FIRST; | |
| 207 | + | |
| 208 | + /** | |
| 209 | + * The "mouse pressed" event. This <code>MouseEvent</code> | |
| 210 | + * occurs when a mouse button is pushed down. | |
| 211 | + */ | |
| 212 | + public static final int MOUSE_PRESSED = 1 + MOUSE_FIRST; //Event.MOUSE_DOWN | |
| 213 | + | |
| 214 | + /** | |
| 215 | + * The "mouse released" event. This <code>MouseEvent</code> | |
| 216 | + * occurs when a mouse button is let up. | |
| 217 | + */ | |
| 218 | + public static final int MOUSE_RELEASED = 2 + MOUSE_FIRST; //Event.MOUSE_UP | |
| 219 | + | |
| 220 | + /** | |
| 221 | + * The "mouse moved" event. This <code>MouseEvent</code> | |
| 222 | + * occurs when the mouse position changes. | |
| 223 | + */ | |
| 224 | + public static final int MOUSE_MOVED = 3 + MOUSE_FIRST; //Event.MOUSE_MOVE | |
| 225 | + | |
| 226 | + /** | |
| 227 | + * The "mouse entered" event. This <code>MouseEvent</code> | |
| 228 | + * occurs when the mouse cursor enters the unobscured part of component's | |
| 229 | + * geometry. | |
| 230 | + */ | |
| 231 | + public static final int MOUSE_ENTERED = 4 + MOUSE_FIRST; //Event.MOUSE_ENTER | |
| 232 | + | |
| 233 | + /** | |
| 234 | + * The "mouse exited" event. This <code>MouseEvent</code> | |
| 235 | + * occurs when the mouse cursor exits the unobscured part of component's | |
| 236 | + * geometry. | |
| 237 | + */ | |
| 238 | + public static final int MOUSE_EXITED = 5 + MOUSE_FIRST; //Event.MOUSE_EXIT | |
| 239 | + | |
| 240 | + /** | |
| 241 | + * The "mouse dragged" event. This <code>MouseEvent</code> | |
| 242 | + * occurs when the mouse position changes while a mouse button is pressed. | |
| 243 | + */ | |
| 244 | + public static final int MOUSE_DRAGGED = 6 + MOUSE_FIRST; //Event.MOUSE_DRAG | |
| 245 | + | |
| 246 | + /** | |
| 247 | + * The "mouse wheel" event. This is the only <code>MouseWheelEvent</code>. | |
| 248 | + * It occurs when a mouse equipped with a wheel has its wheel rotated. | |
| 249 | + * @since 1.4 | |
| 250 | + */ | |
| 251 | + public static final int MOUSE_WHEEL = 7 + MOUSE_FIRST; | |
| 252 | + | |
| 253 | + /** | |
| 254 | + * Indicates no mouse buttons; used by {@link #getButton}. | |
| 255 | + * @since 1.4 | |
| 256 | + */ | |
| 257 | + public static final int NOBUTTON = 0; | |
| 258 | + | |
| 259 | + /** | |
| 260 | + * Indicates mouse button #1; used by {@link #getButton}. | |
| 261 | + * @since 1.4 | |
| 262 | + */ | |
| 263 | + public static final int BUTTON1 = 1; | |
| 264 | + | |
| 265 | + /** | |
| 266 | + * Indicates mouse button #2; used by {@link #getButton}. | |
| 267 | + * @since 1.4 | |
| 268 | + */ | |
| 269 | + public static final int BUTTON2 = 2; | |
| 270 | + | |
| 271 | + /** | |
| 272 | + * Indicates mouse button #3; used by {@link #getButton}. | |
| 273 | + * @since 1.4 | |
| 274 | + */ | |
| 275 | + public static final int BUTTON3 = 3; | |
| 276 | + | |
| 277 | + /** | |
| 278 | + * The mouse event's x coordinate. | |
| 279 | + * The x value is relative to the component that fired the event. | |
| 280 | + * | |
| 281 | + * @serial | |
| 282 | + * @see #getX() | |
| 283 | + */ | |
| 284 | + int x; | |
| 285 | + | |
| 286 | + /** | |
| 287 | + * The mouse event's y coordinate. | |
| 288 | + * The y value is relative to the component that fired the event. | |
| 289 | + * | |
| 290 | + * @serial | |
| 291 | + * @see #getY() | |
| 292 | + */ | |
| 293 | + int y; | |
| 294 | + | |
| 295 | + /** | |
| 296 | + * The mouse event's x absolute coordinate. | |
| 297 | + * In a virtual device multi-screen environment in which the | |
| 298 | + * desktop area could span multiple physical screen devices, | |
| 299 | + * this coordinate is relative to the virtual coordinate system. | |
| 300 | + * Otherwise, this coordinate is relative to the coordinate system | |
| 301 | + * associated with the Component's GraphicsConfiguration. | |
| 302 | + * | |
| 303 | + * @serial | |
| 304 | + */ | |
| 305 | + private int xAbs; | |
| 306 | + | |
| 307 | + /** | |
| 308 | + * The mouse event's y absolute coordinate. | |
| 309 | + * In a virtual device multi-screen environment in which the | |
| 310 | + * desktop area could span multiple physical screen devices, | |
| 311 | + * this coordinate is relative to the virtual coordinate system. | |
| 312 | + * Otherwise, this coordinate is relative to the coordinate system | |
| 313 | + * associated with the Component's GraphicsConfiguration. | |
| 314 | + * | |
| 315 | + * @serial | |
| 316 | + */ | |
| 317 | + private int yAbs; | |
| 318 | + | |
| 319 | + /** | |
| 320 | + * Indicates the number of quick consecutive clicks of | |
| 321 | + * a mouse button. | |
| 322 | + * clickCount will be valid for only three mouse events :<BR> | |
| 323 | + * <code>MOUSE_CLICKED</code>, | |
| 324 | + * <code>MOUSE_PRESSED</code> and | |
| 325 | + * <code>MOUSE_RELEASED</code>. | |
| 326 | + * For the above, the <code>clickCount</code> will be at least 1. | |
| 327 | + * For all other events the count will be 0. | |
| 328 | + * | |
| 329 | + * @serial | |
| 330 | + * @see #getClickCount(). | |
| 331 | + */ | |
| 332 | + int clickCount; | |
| 333 | + | |
| 334 | + /** | |
| 335 | + * Indicates which, if any, of the mouse buttons has changed state. | |
| 336 | + * | |
| 337 | + * The valid values are ranged from 0 to the value returned by the | |
| 338 | + * {@link java.awt.MouseInfo#getNumberOfButtons() MouseInfo.getNumberOfButtons()} method. | |
| 339 | + * This range already includes constants {@code NOBUTTON}, {@code BUTTON1}, | |
| 340 | + * {@code BUTTON2}, and {@code BUTTON3} | |
| 341 | + * if these buttons are present. So it is allowed to use these constants too. | |
| 342 | + * For example, for a mouse with two buttons this field may contain the following values: | |
| 343 | + * <ul> | |
| 344 | + * <li> 0 ({@code NOBUTTON}) | |
| 345 | + * <li> 1 ({@code BUTTON1}) | |
| 346 | + * <li> 2 ({@code BUTTON2}) | |
| 347 | + * </ul> | |
| 348 | + * If a mouse has 5 buttons, this field may contain the following values: | |
| 349 | + * <ul> | |
| 350 | + * <li> 0 ({@code NOBUTTON}) | |
| 351 | + * <li> 1 ({@code BUTTON1}) | |
| 352 | + * <li> 2 ({@code BUTTON2}) | |
| 353 | + * <li> 3 ({@code BUTTON3}) | |
| 354 | + * <li> 4 | |
| 355 | + * <li> 5 | |
| 356 | + * </ul> | |
| 357 | + * If support for extended mouse buttons is {@link Toolkit#areExtraMouseButtonsEnabled()} disabled by Java | |
| 358 | + * then the field may not contain the value larger than {@code BUTTON3}. | |
| 359 | + * @serial | |
| 360 | + * @see #getButton() | |
| 361 | + * @see java.awt.Toolkit#areExtraMouseButtonsEnabled() | |
| 362 | + */ | |
| 363 | + int button; | |
| 364 | + | |
| 365 | + /** | |
| 366 | + * A property used to indicate whether a Popup Menu | |
| 367 | + * should appear with a certain gestures. | |
| 368 | + * If <code>popupTrigger</code> = <code>false</code>, | |
| 369 | + * no popup menu should appear. If it is <code>true</code> | |
| 370 | + * then a popup menu should appear. | |
| 371 | + * | |
| 372 | + * @serial | |
| 373 | + * @see java.awt.PopupMenu | |
| 374 | + * @see #isPopupTrigger() | |
| 375 | + */ | |
| 376 | + boolean popupTrigger = false; | |
| 377 | + | |
| 378 | + /* | |
| 379 | + * JDK 1.1 serialVersionUID | |
| 380 | + */ | |
| 381 | + private static final long serialVersionUID = -991214153494842848L; | |
| 382 | + | |
| 383 | + /** | |
| 384 | + * A number of buttons available on the mouse at the {@code Toolkit} machinery startup. | |
| 385 | + */ | |
| 386 | + private static int cachedNumberOfButtons; | |
| 387 | + | |
| 388 | + static { | |
| 389 | + /* ensure that the necessary native libraries are loaded */ | |
| 390 | + NativeLibLoader.loadLibraries(); | |
| 391 | + if (!GraphicsEnvironment.isHeadless()) { | |
| 392 | + initIDs(); | |
| 393 | + } | |
| 394 | + final Toolkit tk = Toolkit.getDefaultToolkit(); | |
| 395 | + if (tk instanceof SunToolkit) { | |
| 396 | + cachedNumberOfButtons = ((SunToolkit)tk).getNumberOfButtons(); | |
| 397 | + } else { | |
| 398 | + //It's expected that some toolkits (Headless, | |
| 399 | + //whatever besides SunToolkit) could also operate. | |
| 400 | + cachedNumberOfButtons = 3; | |
| 401 | + } | |
| 402 | + } | |
| 403 | + | |
| 404 | + /** | |
| 405 | + * Initialize JNI field and method IDs for fields that may be | |
| 406 | + accessed from C. | |
| 407 | + */ | |
| 408 | + private static native void initIDs(); | |
| 409 | + | |
| 410 | + /** | |
| 411 | + * Returns the absolute x, y position of the event. | |
| 412 | + * In a virtual device multi-screen environment in which the | |
| 413 | + * desktop area could span multiple physical screen devices, | |
| 414 | + * these coordinates are relative to the virtual coordinate system. | |
| 415 | + * Otherwise, these coordinates are relative to the coordinate system | |
| 416 | + * associated with the Component's GraphicsConfiguration. | |
| 417 | + * | |
| 418 | + * @return a <code>Point</code> object containing the absolute x | |
| 419 | + * and y coordinates. | |
| 420 | + * | |
| 421 | + * @see java.awt.GraphicsConfiguration | |
| 422 | + * @since 1.6 | |
| 423 | + */ | |
| 424 | + public Point getLocationOnScreen(){ | |
| 425 | + return new Point(xAbs, yAbs); | |
| 426 | + } | |
| 427 | + | |
| 428 | + /** | |
| 429 | + * Returns the absolute horizontal x position of the event. | |
| 430 | + * In a virtual device multi-screen environment in which the | |
| 431 | + * desktop area could span multiple physical screen devices, | |
| 432 | + * this coordinate is relative to the virtual coordinate system. | |
| 433 | + * Otherwise, this coordinate is relative to the coordinate system | |
| 434 | + * associated with the Component's GraphicsConfiguration. | |
| 435 | + * | |
| 436 | + * @return x an integer indicating absolute horizontal position. | |
| 437 | + * | |
| 438 | + * @see java.awt.GraphicsConfiguration | |
| 439 | + * @since 1.6 | |
| 440 | + */ | |
| 441 | + public int getXOnScreen() { | |
| 442 | + return xAbs; | |
| 443 | + } | |
| 444 | + | |
| 445 | + /** | |
| 446 | + * Returns the absolute vertical y position of the event. | |
| 447 | + * In a virtual device multi-screen environment in which the | |
| 448 | + * desktop area could span multiple physical screen devices, | |
| 449 | + * this coordinate is relative to the virtual coordinate system. | |
| 450 | + * Otherwise, this coordinate is relative to the coordinate system | |
| 451 | + * associated with the Component's GraphicsConfiguration. | |
| 452 | + * | |
| 453 | + * @return y an integer indicating absolute vertical position. | |
| 454 | + * | |
| 455 | + * @see java.awt.GraphicsConfiguration | |
| 456 | + * @since 1.6 | |
| 457 | + */ | |
| 458 | + public int getYOnScreen() { | |
| 459 | + return yAbs; | |
| 460 | + } | |
| 461 | + | |
| 462 | + /** | |
| 463 | + * Constructs a <code>MouseEvent</code> object with the | |
| 464 | + * specified source component, | |
| 465 | + * type, time, modifiers, coordinates, click count, popupTrigger flag, | |
| 466 | + * and button number. | |
| 467 | + * <p> | |
| 468 | + * Creating an invalid event (such | |
| 469 | + * as by using more than one of the old _MASKs, or modifier/button | |
| 470 | + * values which don't match) results in unspecified behavior. | |
| 471 | + * An invocation of the form | |
| 472 | + * <tt>MouseEvent(source, id, when, modifiers, x, y, clickCount, popupTrigger, button)</tt> | |
| 473 | + * behaves in exactly the same way as the invocation | |
| 474 | + * <tt> {@link #MouseEvent(Component, int, long, int, int, int, | |
| 475 | + * int, int, int, boolean, int) MouseEvent}(source, id, when, modifiers, | |
| 476 | + * x, y, xAbs, yAbs, clickCount, popupTrigger, button)</tt> | |
| 477 | + * where xAbs and yAbs defines as source's location on screen plus | |
| 478 | + * relative coordinates x and y. | |
| 479 | + * xAbs and yAbs are set to zero if the source is not showing. | |
| 480 | + * This method throws an | |
| 481 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 482 | + * is <code>null</code>. | |
| 483 | + * | |
| 484 | + * @param source The <code>Component</code> that originated the event | |
| 485 | + * @param id An integer indicating the type of event. | |
| 486 | + * For information on allowable values, see | |
| 487 | + * the class description for {@link MouseEvent} | |
| 488 | + * @param when A long integer that gives the time the event occurred. | |
| 489 | + * Passing negative or zero value | |
| 490 | + * is not recommended | |
| 491 | + * @param modifiers The modifier keys down during event (e.g. shift, ctrl, | |
| 492 | + * alt, meta) | |
| 493 | + * Passing negative parameter | |
| 494 | + * is not recommended. | |
| 495 | + * Zero value means that no modifiers were passed. | |
| 496 | + * Use either an extended _DOWN_MASK or old _MASK modifiers, | |
| 497 | + * however do not mix models in the one event. | |
| 498 | + * The extended modifiers are preferred for using | |
| 499 | + * @param x The horizontal x coordinate for the mouse location. | |
| 500 | + * It is allowed to pass negative values | |
| 501 | + * @param y The vertical y coordinate for the mouse location. | |
| 502 | + * It is allowed to pass negative values | |
| 503 | + * @param clickCount The number of mouse clicks associated with event. | |
| 504 | + * Passing negative value | |
| 505 | + * is not recommended | |
| 506 | + * @param popupTrigger A boolean that equals {@code true} if this event | |
| 507 | + * is a trigger for a popup menu | |
| 508 | + * @param button An integer that indicates, which of the mouse buttons has | |
| 509 | + * changed its state. | |
| 510 | + * The following rules are applied to this parameter: | |
| 511 | + * <ul> | |
| 512 | + * <li>If support for the extended mouse buttons is | |
| 513 | + * {@link Toolkit#areExtraMouseButtonsEnabled() disabled} by Java | |
| 514 | + * then it is allowed to create {@code MouseEvent} objects only with the standard buttons: | |
| 515 | + * {@code NOBUTTON}, {@code BUTTON1}, {@code BUTTON2}, and | |
| 516 | + * {@code BUTTON3}. | |
| 517 | + * <li> If support for the extended mouse buttons is | |
| 518 | + * {@link Toolkit#areExtraMouseButtonsEnabled() enabled} by Java | |
| 519 | + * then it is allowed to create {@code MouseEvent} objects with | |
| 520 | + * the standard buttons. | |
| 521 | + * In case the support for extended mouse buttons is | |
| 522 | + * {@link Toolkit#areExtraMouseButtonsEnabled() enabled} by Java, then | |
| 523 | + * in addition to the standard buttons, {@code MouseEvent} objects can be created | |
| 524 | + * using buttons from the range starting from 4 to | |
| 525 | + * {@link java.awt.MouseInfo#getNumberOfButtons() MouseInfo.getNumberOfButtons()} | |
| 526 | + * if the mouse has more than three buttons. | |
| 527 | + * </ul> | |
| 528 | + * @throws IllegalArgumentException if {@code button} is less then zero | |
| 529 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 530 | + * @throws IllegalArgumentException if {@code button} is greater then BUTTON3 and the support for extended mouse buttons is | |
| 531 | + * {@link Toolkit#areExtraMouseButtonsEnabled() disabled} by Java | |
| 532 | + * @throws IllegalArgumentException if {@code button} is greater then the | |
| 533 | + * {@link java.awt.MouseInfo#getNumberOfButtons() current number of buttons} and the support | |
| 534 | + * for extended mouse buttons is {@link Toolkit#areExtraMouseButtonsEnabled() enabled} | |
| 535 | + * by Java | |
| 536 | + * @throws IllegalArgumentException if an invalid <code>button</code> | |
| 537 | + * value is passed in | |
| 538 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 539 | + * @see #getSource() | |
| 540 | + * @see #getID() | |
| 541 | + * @see #getWhen() | |
| 542 | + * @see #getModifiers() | |
| 543 | + * @see #getX() | |
| 544 | + * @see #getY() | |
| 545 | + * @see #getClickCount() | |
| 546 | + * @see #isPopupTrigger() | |
| 547 | + * @see #getButton() | |
| 548 | + * @since 1.4 | |
| 549 | + */ | |
| 550 | + public MouseEvent(Component source, int id, long when, int modifiers, | |
| 551 | + int x, int y, int clickCount, boolean popupTrigger, | |
| 552 | + int button) | |
| 553 | + { | |
| 554 | + this(source, id, when, modifiers, x, y, 0, 0, clickCount, popupTrigger, button); | |
| 555 | + Point eventLocationOnScreen = new Point(0, 0); | |
| 556 | + try { | |
| 557 | + eventLocationOnScreen = source.getLocationOnScreen(); | |
| 558 | + this.xAbs = eventLocationOnScreen.x + x; | |
| 559 | + this.yAbs = eventLocationOnScreen.y + y; | |
| 560 | + } catch (IllegalComponentStateException e){ | |
| 561 | + this.xAbs = 0; | |
| 562 | + this.yAbs = 0; | |
| 563 | + } | |
| 564 | + } | |
| 565 | + | |
| 566 | + /** | |
| 567 | + * Constructs a <code>MouseEvent</code> object with the | |
| 568 | + * specified source component, | |
| 569 | + * type, modifiers, coordinates, click count, and popupTrigger flag. | |
| 570 | + * An invocation of the form | |
| 571 | + * <tt>MouseEvent(source, id, when, modifiers, x, y, clickCount, popupTrigger)</tt> | |
| 572 | + * behaves in exactly the same way as the invocation | |
| 573 | + * <tt> {@link #MouseEvent(Component, int, long, int, int, int, | |
| 574 | + * int, int, int, boolean, int) MouseEvent}(source, id, when, modifiers, | |
| 575 | + * x, y, xAbs, yAbs, clickCount, popupTrigger, MouseEvent.NOBUTTON)</tt> | |
| 576 | + * where xAbs and yAbs defines as source's location on screen plus | |
| 577 | + * relative coordinates x and y. | |
| 578 | + * xAbs and yAbs are set to zero if the source is not showing. | |
| 579 | + * This method throws an <code>IllegalArgumentException</code> | |
| 580 | + * if <code>source</code> is <code>null</code>. | |
| 581 | + * | |
| 582 | + * @param source The <code>Component</code> that originated the event | |
| 583 | + * @param id An integer indicating the type of event. | |
| 584 | + * For information on allowable values, see | |
| 585 | + * the class description for {@link MouseEvent} | |
| 586 | + * @param when A long integer that gives the time the event occurred. | |
| 587 | + * Passing negative or zero value | |
| 588 | + * is not recommended | |
| 589 | + * @param modifiers The modifier keys down during event (e.g. shift, ctrl, | |
| 590 | + * alt, meta) | |
| 591 | + * Passing negative parameter | |
| 592 | + * is not recommended. | |
| 593 | + * Zero value means that no modifiers were passed. | |
| 594 | + * Use either an extended _DOWN_MASK or old _MASK modifiers, | |
| 595 | + * however do not mix models in the one event. | |
| 596 | + * The extended modifiers are preferred for using | |
| 597 | + * @param x The horizontal x coordinate for the mouse location. | |
| 598 | + * It is allowed to pass negative values | |
| 599 | + * @param y The vertical y coordinate for the mouse location. | |
| 600 | + * It is allowed to pass negative values | |
| 601 | + * @param clickCount The number of mouse clicks associated with event. | |
| 602 | + * Passing negative value | |
| 603 | + * is not recommended | |
| 604 | + * @param popupTrigger A boolean that equals {@code true} if this event | |
| 605 | + * is a trigger for a popup menu | |
| 606 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 607 | + * @see #getSource() | |
| 608 | + * @see #getID() | |
| 609 | + * @see #getWhen() | |
| 610 | + * @see #getModifiers() | |
| 611 | + * @see #getX() | |
| 612 | + * @see #getY() | |
| 613 | + * @see #getClickCount() | |
| 614 | + * @see #isPopupTrigger() | |
| 615 | + */ | |
| 616 | + public MouseEvent(Component source, int id, long when, int modifiers, | |
| 617 | + int x, int y, int clickCount, boolean popupTrigger) { | |
| 618 | + this(source, id, when, modifiers, x, y, clickCount, popupTrigger, NOBUTTON); | |
| 619 | + } | |
| 620 | + | |
| 621 | + | |
| 622 | + /* if the button is an extra button and it is released or clicked then in Xsystem its state | |
| 623 | + is not modified. Exclude this button number from ExtModifiers mask.*/ | |
| 624 | + transient private boolean shouldExcludeButtonFromExtModifiers = false; | |
| 625 | + | |
| 626 | + /** | |
| 627 | + * {@inheritDoc} | |
| 628 | + */ | |
| 629 | + public int getModifiersEx() { | |
| 630 | + int tmpModifiers = modifiers; | |
| 631 | + if (shouldExcludeButtonFromExtModifiers) { | |
| 632 | + tmpModifiers &= ~(InputEvent.getMaskForButton(getButton())); | |
| 633 | + } | |
| 634 | + return tmpModifiers & ~JDK_1_3_MODIFIERS; | |
| 635 | + } | |
| 636 | + | |
| 637 | + /** | |
| 638 | + * Constructs a <code>MouseEvent</code> object with the | |
| 639 | + * specified source component, | |
| 640 | + * type, time, modifiers, coordinates, absolute coordinates, click count, popupTrigger flag, | |
| 641 | + * and button number. | |
| 642 | + * <p> | |
| 643 | + * Creating an invalid event (such | |
| 644 | + * as by using more than one of the old _MASKs, or modifier/button | |
| 645 | + * values which don't match) results in unspecified behavior. | |
| 646 | + * Even if inconsistent values for relative and absolute coordinates are | |
| 647 | + * passed to the constructor, the mouse event instance is still | |
| 648 | + * created and no exception is thrown. | |
| 649 | + * This method throws an | |
| 650 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 651 | + * is <code>null</code>. | |
| 652 | + * | |
| 653 | + * @param source The <code>Component</code> that originated the event | |
| 654 | + * @param id An integer indicating the type of event. | |
| 655 | + * For information on allowable values, see | |
| 656 | + * the class description for {@link MouseEvent} | |
| 657 | + * @param when A long integer that gives the time the event occurred. | |
| 658 | + * Passing negative or zero value | |
| 659 | + * is not recommended | |
| 660 | + * @param modifiers The modifier keys down during event (e.g. shift, ctrl, | |
| 661 | + * alt, meta) | |
| 662 | + * Passing negative parameter | |
| 663 | + * is not recommended. | |
| 664 | + * Zero value means that no modifiers were passed. | |
| 665 | + * Use either an extended _DOWN_MASK or old _MASK modifiers, | |
| 666 | + * however do not mix models in the one event. | |
| 667 | + * The extended modifiers are preferred for using | |
| 668 | + * @param x The horizontal x coordinate for the mouse location. | |
| 669 | + * It is allowed to pass negative values | |
| 670 | + * @param y The vertical y coordinate for the mouse location. | |
| 671 | + * It is allowed to pass negative values | |
| 672 | + * @param xAbs The absolute horizontal x coordinate for the mouse location | |
| 673 | + * It is allowed to pass negative values | |
| 674 | + * @param yAbs The absolute vertical y coordinate for the mouse location | |
| 675 | + * It is allowed to pass negative values | |
| 676 | + * @param clickCount The number of mouse clicks associated with event. | |
| 677 | + * Passing negative value | |
| 678 | + * is not recommended | |
| 679 | + * @param popupTrigger A boolean that equals {@code true} if this event | |
| 680 | + * is a trigger for a popup menu | |
| 681 | + * @param button An integer that indicates, which of the mouse buttons has | |
| 682 | + * changed its state. | |
| 683 | + * The following rules are applied to this parameter: | |
| 684 | + * <ul> | |
| 685 | + * <li>If support for the extended mouse buttons is | |
| 686 | + * {@link Toolkit#areExtraMouseButtonsEnabled() disabled} by Java | |
| 687 | + * then it is allowed to create {@code MouseEvent} objects only with the standard buttons: | |
| 688 | + * {@code NOBUTTON}, {@code BUTTON1}, {@code BUTTON2}, and | |
| 689 | + * {@code BUTTON3}. | |
| 690 | + * <li> If support for the extended mouse buttons is | |
| 691 | + * {@link Toolkit#areExtraMouseButtonsEnabled() enabled} by Java | |
| 692 | + * then it is allowed to create {@code MouseEvent} objects with | |
| 693 | + * the standard buttons. | |
| 694 | + * In case the support for extended mouse buttons is | |
| 695 | + * {@link Toolkit#areExtraMouseButtonsEnabled() enabled} by Java, then | |
| 696 | + * in addition to the standard buttons, {@code MouseEvent} objects can be created | |
| 697 | + * using buttons from the range starting from 4 to | |
| 698 | + * {@link java.awt.MouseInfo#getNumberOfButtons() MouseInfo.getNumberOfButtons()} | |
| 699 | + * if the mouse has more than three buttons. | |
| 700 | + * </ul> | |
| 701 | + * @throws IllegalArgumentException if {@code button} is less then zero | |
| 702 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 703 | + * @throws IllegalArgumentException if {@code button} is greater then BUTTON3 and the support for extended mouse buttons is | |
| 704 | + * {@link Toolkit#areExtraMouseButtonsEnabled() disabled} by Java | |
| 705 | + * @throws IllegalArgumentException if {@code button} is greater then the | |
| 706 | + * {@link java.awt.MouseInfo#getNumberOfButtons() current number of buttons} and the support | |
| 707 | + * for extended mouse buttons is {@link Toolkit#areExtraMouseButtonsEnabled() enabled} | |
| 708 | + * by Java | |
| 709 | + * @throws IllegalArgumentException if an invalid <code>button</code> | |
| 710 | + * value is passed in | |
| 711 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 712 | + * @see #getSource() | |
| 713 | + * @see #getID() | |
| 714 | + * @see #getWhen() | |
| 715 | + * @see #getModifiers() | |
| 716 | + * @see #getX() | |
| 717 | + * @see #getY() | |
| 718 | + * @see #getXOnScreen() | |
| 719 | + * @see #getYOnScreen() | |
| 720 | + * @see #getClickCount() | |
| 721 | + * @see #isPopupTrigger() | |
| 722 | + * @see #getButton() | |
| 723 | + * @see #button | |
| 724 | + * @see Toolkit#areExtraMouseButtonsEnabled() | |
| 725 | + * @see java.awt.MouseInfo#getNumberOfButtons() | |
| 726 | + * @see InputEvent#getMaskForButton(int) | |
| 727 | + * @since 1.6 | |
| 728 | + */ | |
| 729 | + public MouseEvent(Component source, int id, long when, int modifiers, | |
| 730 | + int x, int y, int xAbs, int yAbs, | |
| 731 | + int clickCount, boolean popupTrigger, int button) | |
| 732 | + { | |
| 733 | + super(source, id, when, modifiers); | |
| 734 | + this.x = x; | |
| 735 | + this.y = y; | |
| 736 | + this.xAbs = xAbs; | |
| 737 | + this.yAbs = yAbs; | |
| 738 | + this.clickCount = clickCount; | |
| 739 | + this.popupTrigger = popupTrigger; | |
| 740 | + if (button < NOBUTTON){ | |
| 741 | + throw new IllegalArgumentException("Invalid button value :" + button); | |
| 742 | + } | |
| 743 | + if (button > BUTTON3) { | |
| 744 | + if (!Toolkit.getDefaultToolkit().areExtraMouseButtonsEnabled()){ | |
| 745 | + throw new IllegalArgumentException("Extra mouse events are disabled " + button); | |
| 746 | + } else { | |
| 747 | + if (button > cachedNumberOfButtons) { | |
| 748 | + throw new IllegalArgumentException("Nonexistent button " + button); | |
| 749 | + } | |
| 750 | + } | |
| 751 | + // XToolkit: extra buttons are not reporting about their state correctly. | |
| 752 | + // Being pressed they report the state=0 both on the press and on the release. | |
| 753 | + // For 1-3 buttons the state value equals zero on press and non-zero on release. | |
| 754 | + // Other modifiers like Shift, ALT etc seem report well with extra buttons. | |
| 755 | + // The problem reveals as follows: one button is pressed and then another button is pressed and released. | |
| 756 | + // So, the getModifiersEx() would not be zero due to a first button and we will skip this modifier. | |
| 757 | + // This may have to be moved into the peer code instead if possible. | |
| 758 | + | |
| 759 | + if (getModifiersEx() != 0) { //There is at least one more button in a pressed state. | |
| 760 | + if (id == MouseEvent.MOUSE_RELEASED || id == MouseEvent.MOUSE_CLICKED){ | |
| 761 | + System.out.println("MEvent. CASE!"); | |
| 762 | + shouldExcludeButtonFromExtModifiers = true; | |
| 763 | + } | |
| 764 | + } | |
| 765 | + } | |
| 766 | + | |
| 767 | + this.button = button; | |
| 768 | + | |
| 769 | + if ((getModifiers() != 0) && (getModifiersEx() == 0)) { | |
| 770 | + setNewModifiers(); | |
| 771 | + } else if ((getModifiers() == 0) && | |
| 772 | + (getModifiersEx() != 0 || button != NOBUTTON) && | |
| 773 | + (button <= BUTTON3)) | |
| 774 | + { | |
| 775 | + setOldModifiers(); | |
| 776 | + } | |
| 777 | + } | |
| 778 | + | |
| 779 | + /** | |
| 780 | + * Returns the horizontal x position of the event relative to the | |
| 781 | + * source component. | |
| 782 | + * | |
| 783 | + * @return x an integer indicating horizontal position relative to | |
| 784 | + * the component | |
| 785 | + */ | |
| 786 | + public int getX() { | |
| 787 | + return x; | |
| 788 | + } | |
| 789 | + | |
| 790 | + /** | |
| 791 | + * Returns the vertical y position of the event relative to the | |
| 792 | + * source component. | |
| 793 | + * | |
| 794 | + * @return y an integer indicating vertical position relative to | |
| 795 | + * the component | |
| 796 | + */ | |
| 797 | + public int getY() { | |
| 798 | + return y; | |
| 799 | + } | |
| 800 | + | |
| 801 | + /** | |
| 802 | + * Returns the x,y position of the event relative to the source component. | |
| 803 | + * | |
| 804 | + * @return a <code>Point</code> object containing the x and y coordinates | |
| 805 | + * relative to the source component | |
| 806 | + * | |
| 807 | + */ | |
| 808 | + public Point getPoint() { | |
| 809 | + int x; | |
| 810 | + int y; | |
| 811 | + synchronized (this) { | |
| 812 | + x = this.x; | |
| 813 | + y = this.y; | |
| 814 | + } | |
| 815 | + return new Point(x, y); | |
| 816 | + } | |
| 817 | + | |
| 818 | + /** | |
| 819 | + * Translates the event's coordinates to a new position | |
| 820 | + * by adding specified <code>x</code> (horizontal) and <code>y</code> | |
| 821 | + * (vertical) offsets. | |
| 822 | + * | |
| 823 | + * @param x the horizontal x value to add to the current x | |
| 824 | + * coordinate position | |
| 825 | + * @param y the vertical y value to add to the current y | |
| 826 | + coordinate position | |
| 827 | + */ | |
| 828 | + public synchronized void translatePoint(int x, int y) { | |
| 829 | + this.x += x; | |
| 830 | + this.y += y; | |
| 831 | + } | |
| 832 | + | |
| 833 | + /** | |
| 834 | + * Returns the number of mouse clicks associated with this event. | |
| 835 | + * | |
| 836 | + * @return integer value for the number of clicks | |
| 837 | + */ | |
| 838 | + public int getClickCount() { | |
| 839 | + return clickCount; | |
| 840 | + } | |
| 841 | + | |
| 842 | + /** | |
| 843 | + * Returns which, if any, of the mouse buttons has changed state. | |
| 844 | + * The returned value is ranged | |
| 845 | + * from 0 to the {@link java.awt.MouseInfo#getNumberOfButtons() MouseInfo.getNumberOfButtons()} | |
| 846 | + * value. | |
| 847 | + * The returned value includes at least the following constants: | |
| 848 | + * <ul> | |
| 849 | + * <li> {@code NOBUTTON} | |
| 850 | + * <li> {@code BUTTON1} | |
| 851 | + * <li> {@code BUTTON2} | |
| 852 | + * <li> {@code BUTTON3} | |
| 853 | + * </ul> | |
| 854 | + * It is allowed to use those constants to compare with the returned button number in the application. | |
| 855 | + * For example, | |
| 856 | + * <pre> | |
| 857 | + * if (anEvent.getButton() == MouseEvent.BUTTON1) { | |
| 858 | + * </pre> | |
| 859 | + * In particular, for a mouse with one, two, or three buttons this method may return the following values: | |
| 860 | + * <ul> | |
| 861 | + * <li> 0 ({@code NOBUTTON}) | |
| 862 | + * <li> 1 ({@code BUTTON1}) | |
| 863 | + * <li> 2 ({@code BUTTON2}) | |
| 864 | + * <li> 3 ({@code BUTTON3}) | |
| 865 | + * </ul> | |
| 866 | + * Button numbers greater then {@code BUTTON3} have no constant identifier. So if a mouse with five buttons is | |
| 867 | + * installed, this method may return the following values: | |
| 868 | + * <ul> | |
| 869 | + * <li> 0 ({@code NOBUTTON}) | |
| 870 | + * <li> 1 ({@code BUTTON1}) | |
| 871 | + * <li> 2 ({@code BUTTON2}) | |
| 872 | + * <li> 3 ({@code BUTTON3}) | |
| 873 | + * <li> 4 | |
| 874 | + * <li> 5 | |
| 875 | + * </ul> | |
| 876 | + * <p> | |
| 877 | + * Note: If support for extended mouse buttons is {@link Toolkit#areExtraMouseButtonsEnabled() disabled} by Java | |
| 878 | + * then the AWT event subsystem does not produce mouse events for the extended mouse | |
| 879 | + * buttons. So it is not expected that this method returns anything except {@code NOBUTTON}, {@code BUTTON1}, | |
| 880 | + * {@code BUTTON2}, {@code BUTTON3}. | |
| 881 | + * | |
| 882 | + * @return one of the values from 0 to {@link java.awt.MouseInfo#getNumberOfButtons() MouseInfo.getNumberOfButtons()} | |
| 883 | + * if support for the extended mouse buttons is {@link Toolkit#areExtraMouseButtonsEnabled() enabled} by Java. | |
| 884 | + * That range includes {@code NOBUTTON}, {@code BUTTON1}, {@code BUTTON2}, {@code BUTTON3}; | |
| 885 | + * <br> | |
| 886 | + * {@code NOBUTTON}, {@code BUTTON1}, {@code BUTTON2} or {@code BUTTON3} | |
| 887 | + * if support for the extended mouse buttons is {@link Toolkit#areExtraMouseButtonsEnabled() disabled} by Java | |
| 888 | + * @since 1.4 | |
| 889 | + * @see Toolkit#areExtraMouseButtonsEnabled() | |
| 890 | + * @see java.awt.MouseInfo#getNumberOfButtons() | |
| 891 | + * @see #MouseEvent(Component, int, long, int, int, int, int, int, int, boolean, int) | |
| 892 | + * @see InputEvent#getMaskForButton(int) | |
| 893 | + */ | |
| 894 | + public int getButton() { | |
| 895 | + return button; | |
| 896 | + } | |
| 897 | + | |
| 898 | + /** | |
| 899 | + * Returns whether or not this mouse event is the popup menu | |
| 900 | + * trigger event for the platform. | |
| 901 | + * <p><b>Note</b>: Popup menus are triggered differently | |
| 902 | + * on different systems. Therefore, <code>isPopupTrigger</code> | |
| 903 | + * should be checked in both <code>mousePressed</code> | |
| 904 | + * and <code>mouseReleased</code> | |
| 905 | + * for proper cross-platform functionality. | |
| 906 | + * | |
| 907 | + * @return boolean, true if this event is the popup menu trigger | |
| 908 | + * for this platform | |
| 909 | + */ | |
| 910 | + public boolean isPopupTrigger() { | |
| 911 | + return popupTrigger; | |
| 912 | + } | |
| 913 | + | |
| 914 | + /** | |
| 915 | + * Returns a <code>String</code> instance describing the modifier keys and | |
| 916 | + * mouse buttons that were down during the event, such as "Shift", | |
| 917 | + * or "Ctrl+Shift". These strings can be localized by changing | |
| 918 | + * the <code>awt.properties</code> file. | |
| 919 | + * <p> | |
| 920 | + * Note that the <code>InputEvent.ALT_MASK</code> and | |
| 921 | + * <code>InputEvent.BUTTON2_MASK</code> have equal values, | |
| 922 | + * so the "Alt" string is returned for both modifiers. Likewise, | |
| 923 | + * the <code>InputEvent.META_MASK</code> and | |
| 924 | + * <code>InputEvent.BUTTON3_MASK</code> have equal values, | |
| 925 | + * so the "Meta" string is returned for both modifiers. | |
| 926 | + * <p> | |
| 927 | + * Note that passing negative parameter is incorrect, | |
| 928 | + * and will cause the returning an unspecified string. | |
| 929 | + * Zero parameter means that no modifiers were passed and will | |
| 930 | + * cause the returning an empty string. | |
| 931 | + * <p> | |
| 932 | + * @param modifiers A modifier mask describing the modifier keys and | |
| 933 | + * mouse buttons that were down during the event | |
| 934 | + * @return string string text description of the combination of modifier | |
| 935 | + * keys and mouse buttons that were down during the event | |
| 936 | + * @see InputEvent#getModifiersExText(int) | |
| 937 | + * @since 1.4 | |
| 938 | + */ | |
| 939 | + public static String getMouseModifiersText(int modifiers) { | |
| 940 | + StringBuilder buf = new StringBuilder(); | |
| 941 | + if ((modifiers & InputEvent.ALT_MASK) != 0) { | |
| 942 | + buf.append(Toolkit.getProperty("AWT.alt", "Alt")); | |
| 943 | + buf.append("+"); | |
| 944 | + } | |
| 945 | + if ((modifiers & InputEvent.META_MASK) != 0) { | |
| 946 | + buf.append(Toolkit.getProperty("AWT.meta", "Meta")); | |
| 947 | + buf.append("+"); | |
| 948 | + } | |
| 949 | + if ((modifiers & InputEvent.CTRL_MASK) != 0) { | |
| 950 | + buf.append(Toolkit.getProperty("AWT.control", "Ctrl")); | |
| 951 | + buf.append("+"); | |
| 952 | + } | |
| 953 | + if ((modifiers & InputEvent.SHIFT_MASK) != 0) { | |
| 954 | + buf.append(Toolkit.getProperty("AWT.shift", "Shift")); | |
| 955 | + buf.append("+"); | |
| 956 | + } | |
| 957 | + if ((modifiers & InputEvent.ALT_GRAPH_MASK) != 0) { | |
| 958 | + buf.append(Toolkit.getProperty("AWT.altGraph", "Alt Graph")); | |
| 959 | + buf.append("+"); | |
| 960 | + } | |
| 961 | + if ((modifiers & InputEvent.BUTTON1_MASK) != 0) { | |
| 962 | + buf.append(Toolkit.getProperty("AWT.button1", "Button1")); | |
| 963 | + buf.append("+"); | |
| 964 | + } | |
| 965 | + if ((modifiers & InputEvent.BUTTON2_MASK) != 0) { | |
| 966 | + buf.append(Toolkit.getProperty("AWT.button2", "Button2")); | |
| 967 | + buf.append("+"); | |
| 968 | + } | |
| 969 | + if ((modifiers & InputEvent.BUTTON3_MASK) != 0) { | |
| 970 | + buf.append(Toolkit.getProperty("AWT.button3", "Button3")); | |
| 971 | + buf.append("+"); | |
| 972 | + } | |
| 973 | + | |
| 974 | + int mask; | |
| 975 | + | |
| 976 | + // TODO: add a toolkit field that holds a number of button on the mouse. | |
| 977 | + // As the method getMouseModifiersText() is static and obtain | |
| 978 | + // an integer as a parameter then we may not restrict this with the number | |
| 979 | + // of buttons installed on the mouse. | |
| 980 | + // It's a temporary solution. We need to somehow hold the number of buttons somewhere else. | |
| 981 | + for (int i = 1; i <= cachedNumberOfButtons; i++){ | |
| 982 | + mask = InputEvent.getMaskForButton(i); | |
| 983 | + if ((modifiers & mask) != 0 && | |
| 984 | + buf.indexOf(Toolkit.getProperty("AWT.button"+i, "Button"+i)) == -1) //1,2,3 buttons may already be there; so don't duplicate it. | |
| 985 | + { | |
| 986 | + buf.append(Toolkit.getProperty("AWT.button"+i, "Button"+i)); | |
| 987 | + buf.append("+"); | |
| 988 | + } | |
| 989 | + } | |
| 990 | + | |
| 991 | + if (buf.length() > 0) { | |
| 992 | + buf.setLength(buf.length()-1); // remove trailing '+' | |
| 993 | + } | |
| 994 | + return buf.toString(); | |
| 995 | + } | |
| 996 | + | |
| 997 | + /** | |
| 998 | + * Returns a parameter string identifying this event. | |
| 999 | + * This method is useful for event-logging and for debugging. | |
| 1000 | + * | |
| 1001 | + * @return a string identifying the event and its attributes | |
| 1002 | + */ | |
| 1003 | + public String paramString() { | |
| 1004 | + StringBuilder str = new StringBuilder(80); | |
| 1005 | + | |
| 1006 | + switch(id) { | |
| 1007 | + case MOUSE_PRESSED: | |
| 1008 | + str.append("MOUSE_PRESSED"); | |
| 1009 | + break; | |
| 1010 | + case MOUSE_RELEASED: | |
| 1011 | + str.append("MOUSE_RELEASED"); | |
| 1012 | + break; | |
| 1013 | + case MOUSE_CLICKED: | |
| 1014 | + str.append("MOUSE_CLICKED"); | |
| 1015 | + break; | |
| 1016 | + case MOUSE_ENTERED: | |
| 1017 | + str.append("MOUSE_ENTERED"); | |
| 1018 | + break; | |
| 1019 | + case MOUSE_EXITED: | |
| 1020 | + str.append("MOUSE_EXITED"); | |
| 1021 | + break; | |
| 1022 | + case MOUSE_MOVED: | |
| 1023 | + str.append("MOUSE_MOVED"); | |
| 1024 | + break; | |
| 1025 | + case MOUSE_DRAGGED: | |
| 1026 | + str.append("MOUSE_DRAGGED"); | |
| 1027 | + break; | |
| 1028 | + case MOUSE_WHEEL: | |
| 1029 | + str.append("MOUSE_WHEEL"); | |
| 1030 | + break; | |
| 1031 | + default: | |
| 1032 | + str.append("unknown type"); | |
| 1033 | + } | |
| 1034 | + | |
| 1035 | + // (x,y) coordinates | |
| 1036 | + str.append(",(").append(x).append(",").append(y).append(")"); | |
| 1037 | + str.append(",absolute(").append(xAbs).append(",").append(yAbs).append(")"); | |
| 1038 | + | |
| 1039 | + if (id != MOUSE_DRAGGED && id != MOUSE_MOVED){ | |
| 1040 | + str.append(",button=").append(getButton()); | |
| 1041 | + } | |
| 1042 | + | |
| 1043 | + if (getModifiers() != 0) { | |
| 1044 | + str.append(",modifiers=").append(getMouseModifiersText(modifiers)); | |
| 1045 | + } | |
| 1046 | + | |
| 1047 | + if (getModifiersEx() != 0) { | |
| 1048 | + //Using plain "modifiers" here does show an excluded extended buttons in the string event representation. | |
| 1049 | + //getModifiersEx() solves the problem. | |
| 1050 | + str.append(",extModifiers=").append(getModifiersExText(getModifiersEx())); | |
| 1051 | + } | |
| 1052 | + | |
| 1053 | + str.append(",clickCount=").append(clickCount); | |
| 1054 | + | |
| 1055 | + return str.toString(); | |
| 1056 | + } | |
| 1057 | + | |
| 1058 | + /** | |
| 1059 | + * Sets new modifiers by the old ones. | |
| 1060 | + * Also sets button. | |
| 1061 | + */ | |
| 1062 | + private void setNewModifiers() { | |
| 1063 | + if ((modifiers & BUTTON1_MASK) != 0) { | |
| 1064 | + modifiers |= BUTTON1_DOWN_MASK; | |
| 1065 | + } | |
| 1066 | + if ((modifiers & BUTTON2_MASK) != 0) { | |
| 1067 | + modifiers |= BUTTON2_DOWN_MASK; | |
| 1068 | + } | |
| 1069 | + if ((modifiers & BUTTON3_MASK) != 0) { | |
| 1070 | + modifiers |= BUTTON3_DOWN_MASK; | |
| 1071 | + } | |
| 1072 | + if (id == MOUSE_PRESSED | |
| 1073 | + || id == MOUSE_RELEASED | |
| 1074 | + || id == MOUSE_CLICKED) | |
| 1075 | + { | |
| 1076 | + if ((modifiers & BUTTON1_MASK) != 0) { | |
| 1077 | + button = BUTTON1; | |
| 1078 | + modifiers &= ~BUTTON2_MASK & ~BUTTON3_MASK; | |
| 1079 | + if (id != MOUSE_PRESSED) { | |
| 1080 | + modifiers &= ~BUTTON1_DOWN_MASK; | |
| 1081 | + } | |
| 1082 | + } else if ((modifiers & BUTTON2_MASK) != 0) { | |
| 1083 | + button = BUTTON2; | |
| 1084 | + modifiers &= ~BUTTON1_MASK & ~BUTTON3_MASK; | |
| 1085 | + if (id != MOUSE_PRESSED) { | |
| 1086 | + modifiers &= ~BUTTON2_DOWN_MASK; | |
| 1087 | + } | |
| 1088 | + } else if ((modifiers & BUTTON3_MASK) != 0) { | |
| 1089 | + button = BUTTON3; | |
| 1090 | + modifiers &= ~BUTTON1_MASK & ~BUTTON2_MASK; | |
| 1091 | + if (id != MOUSE_PRESSED) { | |
| 1092 | + modifiers &= ~BUTTON3_DOWN_MASK; | |
| 1093 | + } | |
| 1094 | + } | |
| 1095 | + } | |
| 1096 | + if ((modifiers & InputEvent.ALT_MASK) != 0) { | |
| 1097 | + modifiers |= InputEvent.ALT_DOWN_MASK; | |
| 1098 | + } | |
| 1099 | + if ((modifiers & InputEvent.META_MASK) != 0) { | |
| 1100 | + modifiers |= InputEvent.META_DOWN_MASK; | |
| 1101 | + } | |
| 1102 | + if ((modifiers & InputEvent.SHIFT_MASK) != 0) { | |
| 1103 | + modifiers |= InputEvent.SHIFT_DOWN_MASK; | |
| 1104 | + } | |
| 1105 | + if ((modifiers & InputEvent.CTRL_MASK) != 0) { | |
| 1106 | + modifiers |= InputEvent.CTRL_DOWN_MASK; | |
| 1107 | + } | |
| 1108 | + if ((modifiers & InputEvent.ALT_GRAPH_MASK) != 0) { | |
| 1109 | + modifiers |= InputEvent.ALT_GRAPH_DOWN_MASK; | |
| 1110 | + } | |
| 1111 | + } | |
| 1112 | + | |
| 1113 | + /** | |
| 1114 | + * Sets old modifiers by the new ones. | |
| 1115 | + */ | |
| 1116 | + private void setOldModifiers() { | |
| 1117 | + if (id == MOUSE_PRESSED | |
| 1118 | + || id == MOUSE_RELEASED | |
| 1119 | + || id == MOUSE_CLICKED) | |
| 1120 | + { | |
| 1121 | + switch(button) { | |
| 1122 | + case BUTTON1: | |
| 1123 | + modifiers |= BUTTON1_MASK; | |
| 1124 | + break; | |
| 1125 | + case BUTTON2: | |
| 1126 | + modifiers |= BUTTON2_MASK; | |
| 1127 | + break; | |
| 1128 | + case BUTTON3: | |
| 1129 | + modifiers |= BUTTON3_MASK; | |
| 1130 | + break; | |
| 1131 | + } | |
| 1132 | + } else { | |
| 1133 | + if ((modifiers & BUTTON1_DOWN_MASK) != 0) { | |
| 1134 | + modifiers |= BUTTON1_MASK; | |
| 1135 | + } | |
| 1136 | + if ((modifiers & BUTTON2_DOWN_MASK) != 0) { | |
| 1137 | + modifiers |= BUTTON2_MASK; | |
| 1138 | + } | |
| 1139 | + if ((modifiers & BUTTON3_DOWN_MASK) != 0) { | |
| 1140 | + modifiers |= BUTTON3_MASK; | |
| 1141 | + } | |
| 1142 | + } | |
| 1143 | + if ((modifiers & ALT_DOWN_MASK) != 0) { | |
| 1144 | + modifiers |= ALT_MASK; | |
| 1145 | + } | |
| 1146 | + if ((modifiers & META_DOWN_MASK) != 0) { | |
| 1147 | + modifiers |= META_MASK; | |
| 1148 | + } | |
| 1149 | + if ((modifiers & SHIFT_DOWN_MASK) != 0) { | |
| 1150 | + modifiers |= SHIFT_MASK; | |
| 1151 | + } | |
| 1152 | + if ((modifiers & CTRL_DOWN_MASK) != 0) { | |
| 1153 | + modifiers |= CTRL_MASK; | |
| 1154 | + } | |
| 1155 | + if ((modifiers & ALT_GRAPH_DOWN_MASK) != 0) { | |
| 1156 | + modifiers |= ALT_GRAPH_MASK; | |
| 1157 | + } | |
| 1158 | + } | |
| 1159 | + | |
| 1160 | + /** | |
| 1161 | + * Sets new modifiers by the old ones. | |
| 1162 | + * @serial | |
| 1163 | + */ | |
| 1164 | + private void readObject(ObjectInputStream s) | |
| 1165 | + throws IOException, ClassNotFoundException { | |
| 1166 | + s.defaultReadObject(); | |
| 1167 | + if (getModifiers() != 0 && getModifiersEx() == 0) { | |
| 1168 | + setNewModifiers(); | |
| 1169 | + } | |
| 1170 | + } | |
| 1171 | +} | |
Binary file not shown.
| @@ -0,0 +1,84 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListener; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * The listener interface for receiving "interesting" mouse events | |
| 32 | + * (press, release, click, enter, and exit) on a component. | |
| 33 | + * (To track mouse moves and mouse drags, use the | |
| 34 | + * <code>MouseMotionListener</code>.) | |
| 35 | + * <P> | |
| 36 | + * The class that is interested in processing a mouse event | |
| 37 | + * either implements this interface (and all the methods it | |
| 38 | + * contains) or extends the abstract <code>MouseAdapter</code> class | |
| 39 | + * (overriding only the methods of interest). | |
| 40 | + * <P> | |
| 41 | + * The listener object created from that class is then registered with a | |
| 42 | + * component using the component's <code>addMouseListener</code> | |
| 43 | + * method. A mouse event is generated when the mouse is pressed, released | |
| 44 | + * clicked (pressed and released). A mouse event is also generated when | |
| 45 | + * the mouse cursor enters or leaves a component. When a mouse event | |
| 46 | + * occurs, the relevant method in the listener object is invoked, and | |
| 47 | + * the <code>MouseEvent</code> is passed to it. | |
| 48 | + * | |
| 49 | + * @author Carl Quinn | |
| 50 | + * | |
| 51 | + * @see MouseAdapter | |
| 52 | + * @see MouseEvent | |
| 53 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/mouselistener.html">Tutorial: Writing a Mouse Listener</a> | |
| 54 | + * | |
| 55 | + * @since 1.1 | |
| 56 | + */ | |
| 57 | +public interface MouseListener extends EventListener { | |
| 58 | + | |
| 59 | + /** | |
| 60 | + * Invoked when the mouse button has been clicked (pressed | |
| 61 | + * and released) on a component. | |
| 62 | + */ | |
| 63 | + public void mouseClicked(MouseEvent e); | |
| 64 | + | |
| 65 | + /** | |
| 66 | + * Invoked when a mouse button has been pressed on a component. | |
| 67 | + */ | |
| 68 | + public void mousePressed(MouseEvent e); | |
| 69 | + | |
| 70 | + /** | |
| 71 | + * Invoked when a mouse button has been released on a component. | |
| 72 | + */ | |
| 73 | + public void mouseReleased(MouseEvent e); | |
| 74 | + | |
| 75 | + /** | |
| 76 | + * Invoked when the mouse enters a component. | |
| 77 | + */ | |
| 78 | + public void mouseEntered(MouseEvent e); | |
| 79 | + | |
| 80 | + /** | |
| 81 | + * Invoked when the mouse exits a component. | |
| 82 | + */ | |
| 83 | + public void mouseExited(MouseEvent e); | |
| 84 | +} | |
Binary file not shown.
| @@ -0,0 +1,71 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +/** | |
| 29 | + * An abstract adapter class for receiving mouse motion events. | |
| 30 | + * The methods in this class are empty. This class exists as | |
| 31 | + * convenience for creating listener objects. | |
| 32 | + * <P> | |
| 33 | + * Mouse motion events occur when a mouse is moved or dragged. | |
| 34 | + * (Many such events will be generated in a normal program. | |
| 35 | + * To track clicks and other mouse events, use the MouseAdapter.) | |
| 36 | + * <P> | |
| 37 | + * Extend this class to create a <code>MouseEvent</code> listener | |
| 38 | + * and override the methods for the events of interest. (If you implement the | |
| 39 | + * <code>MouseMotionListener</code> interface, you have to define all of | |
| 40 | + * the methods in it. This abstract class defines null methods for them | |
| 41 | + * all, so you can only have to define methods for events you care about.) | |
| 42 | + * <P> | |
| 43 | + * Create a listener object using the extended class and then register it with | |
| 44 | + * a component using the component's <code>addMouseMotionListener</code> | |
| 45 | + * method. When the mouse is moved or dragged, the relevant method in the | |
| 46 | + * listener object is invoked and the <code>MouseEvent</code> is passed to it. | |
| 47 | + * | |
| 48 | + * @author Amy Fowler | |
| 49 | + * | |
| 50 | + * @see MouseEvent | |
| 51 | + * @see MouseMotionListener | |
| 52 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/mousemotionlistener.html">Tutorial: Writing a Mouse Motion Listener</a> | |
| 53 | + * | |
| 54 | + * @since 1.1 | |
| 55 | + */ | |
| 56 | +public abstract class MouseMotionAdapter implements MouseMotionListener { | |
| 57 | + /** | |
| 58 | + * Invoked when a mouse button is pressed on a component and then | |
| 59 | + * dragged. Mouse drag events will continue to be delivered to | |
| 60 | + * the component where the first originated until the mouse button is | |
| 61 | + * released (regardless of whether the mouse position is within the | |
| 62 | + * bounds of the component). | |
| 63 | + */ | |
| 64 | + public void mouseDragged(MouseEvent e) {} | |
| 65 | + | |
| 66 | + /** | |
| 67 | + * Invoked when the mouse button has been moved on a component | |
| 68 | + * (with no buttons no down). | |
| 69 | + */ | |
| 70 | + public void mouseMoved(MouseEvent e) {} | |
| 71 | +} | |
Binary file not shown.
| @@ -0,0 +1,75 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListener; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * The listener interface for receiving mouse motion events on a component. | |
| 32 | + * (For clicks and other mouse events, use the <code>MouseListener</code>.) | |
| 33 | + * <P> | |
| 34 | + * The class that is interested in processing a mouse motion event | |
| 35 | + * either implements this interface (and all the methods it | |
| 36 | + * contains) or extends the abstract <code>MouseMotionAdapter</code> class | |
| 37 | + * (overriding only the methods of interest). | |
| 38 | + * <P> | |
| 39 | + * The listener object created from that class is then registered with a | |
| 40 | + * component using the component's <code>addMouseMotionListener</code> | |
| 41 | + * method. A mouse motion event is generated when the mouse is moved | |
| 42 | + * or dragged. (Many such events will be generated). When a mouse motion event | |
| 43 | + * occurs, the relevant method in the listener object is invoked, and | |
| 44 | + * the <code>MouseEvent</code> is passed to it. | |
| 45 | + * | |
| 46 | + * @author Amy Fowler | |
| 47 | + * | |
| 48 | + * @see MouseMotionAdapter | |
| 49 | + * @see MouseEvent | |
| 50 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/mousemotionlistener.html">Tutorial: Writing a Mouse Motion Listener</a> | |
| 51 | + * | |
| 52 | + * @since 1.1 | |
| 53 | + */ | |
| 54 | +public interface MouseMotionListener extends EventListener { | |
| 55 | + | |
| 56 | + /** | |
| 57 | + * Invoked when a mouse button is pressed on a component and then | |
| 58 | + * dragged. <code>MOUSE_DRAGGED</code> events will continue to be | |
| 59 | + * delivered to the component where the drag originated until the | |
| 60 | + * mouse button is released (regardless of whether the mouse position | |
| 61 | + * is within the bounds of the component). | |
| 62 | + * <p> | |
| 63 | + * Due to platform-dependent Drag&Drop implementations, | |
| 64 | + * <code>MOUSE_DRAGGED</code> events may not be delivered during a native | |
| 65 | + * Drag&Drop operation. | |
| 66 | + */ | |
| 67 | + public void mouseDragged(MouseEvent e); | |
| 68 | + | |
| 69 | + /** | |
| 70 | + * Invoked when the mouse cursor has been moved onto a component | |
| 71 | + * but no buttons have been pushed. | |
| 72 | + */ | |
| 73 | + public void mouseMoved(MouseEvent e); | |
| 74 | + | |
| 75 | +} | |
Binary file not shown.
| @@ -0,0 +1,447 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.awt.Component; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * An event which indicates that the mouse wheel was rotated in a component. | |
| 32 | + * <P> | |
| 33 | + * A wheel mouse is a mouse which has a wheel in place of the middle button. | |
| 34 | + * This wheel can be rotated towards or away from the user. Mouse wheels are | |
| 35 | + * most often used for scrolling, though other uses are possible. | |
| 36 | + * <P> | |
| 37 | + * A MouseWheelEvent object is passed to every <code>MouseWheelListener</code> | |
| 38 | + * object which registered to receive the "interesting" mouse events using the | |
| 39 | + * component's <code>addMouseWheelListener</code> method. Each such listener | |
| 40 | + * object gets a <code>MouseEvent</code> containing the mouse event. | |
| 41 | + * <P> | |
| 42 | + * Due to the mouse wheel's special relationship to scrolling Components, | |
| 43 | + * MouseWheelEvents are delivered somewhat differently than other MouseEvents. | |
| 44 | + * This is because while other MouseEvents usually affect a change on | |
| 45 | + * the Component directly under the mouse | |
| 46 | + * cursor (for instance, when clicking a button), MouseWheelEvents often have | |
| 47 | + * an effect away from the mouse cursor (moving the wheel while | |
| 48 | + * over a Component inside a ScrollPane should scroll one of the | |
| 49 | + * Scrollbars on the ScrollPane). | |
| 50 | + * <P> | |
| 51 | + * MouseWheelEvents start delivery from the Component underneath the | |
| 52 | + * mouse cursor. If MouseWheelEvents are not enabled on the | |
| 53 | + * Component, the event is delivered to the first ancestor | |
| 54 | + * Container with MouseWheelEvents enabled. This will usually be | |
| 55 | + * a ScrollPane with wheel scrolling enabled. The source | |
| 56 | + * Component and x,y coordinates will be relative to the event's | |
| 57 | + * final destination (the ScrollPane). This allows a complex | |
| 58 | + * GUI to be installed without modification into a ScrollPane, and | |
| 59 | + * for all MouseWheelEvents to be delivered to the ScrollPane for | |
| 60 | + * scrolling. | |
| 61 | + * <P> | |
| 62 | + * Some AWT Components are implemented using native widgets which | |
| 63 | + * display their own scrollbars and handle their own scrolling. | |
| 64 | + * The particular Components for which this is true will vary from | |
| 65 | + * platform to platform. When the mouse wheel is | |
| 66 | + * moved over one of these Components, the event is delivered straight to | |
| 67 | + * the native widget, and not propagated to ancestors. | |
| 68 | + * <P> | |
| 69 | + * Platforms offer customization of the amount of scrolling that | |
| 70 | + * should take place when the mouse wheel is moved. The two most | |
| 71 | + * common settings are to scroll a certain number of "units" | |
| 72 | + * (commonly lines of text in a text-based component) or an entire "block" | |
| 73 | + * (similar to page-up/page-down). The MouseWheelEvent offers | |
| 74 | + * methods for conforming to the underlying platform settings. These | |
| 75 | + * platform settings can be changed at any time by the user. MouseWheelEvents | |
| 76 | + * reflect the most recent settings. | |
| 77 | + * <P> | |
| 78 | + * The <code>MouseWheelEvent</code> class includes methods for | |
| 79 | + * getting the number of "clicks" by which the mouse wheel is rotated. | |
| 80 | + * The {@link #getWheelRotation} method returns the integer number | |
| 81 | + * of "clicks" corresponding to the number of notches by which the wheel was | |
| 82 | + * rotated. In addition to this method, the <code>MouseWheelEvent</code> | |
| 83 | + * class provides the {@link #getPreciseWheelRotation} method which returns | |
| 84 | + * a double number of "clicks" in case a partial rotation occurred. | |
| 85 | + * The {@link #getPreciseWheelRotation} method is useful if a mouse supports | |
| 86 | + * a high-resolution wheel, such as a freely rotating wheel with no | |
| 87 | + * notches. Applications can benefit by using this method to process | |
| 88 | + * mouse wheel events more precisely, and thus, making visual perception | |
| 89 | + * smoother. | |
| 90 | + * | |
| 91 | + * @author Brent Christian | |
| 92 | + * @see MouseWheelListener | |
| 93 | + * @see java.awt.ScrollPane | |
| 94 | + * @see java.awt.ScrollPane#setWheelScrollingEnabled(boolean) | |
| 95 | + * @see javax.swing.JScrollPane | |
| 96 | + * @see javax.swing.JScrollPane#setWheelScrollingEnabled(boolean) | |
| 97 | + * @since 1.4 | |
| 98 | + */ | |
| 99 | + | |
| 100 | +public class MouseWheelEvent extends MouseEvent { | |
| 101 | + | |
| 102 | + /** | |
| 103 | + * Constant representing scrolling by "units" (like scrolling with the | |
| 104 | + * arrow keys) | |
| 105 | + * | |
| 106 | + * @see #getScrollType | |
| 107 | + */ | |
| 108 | + public static final int WHEEL_UNIT_SCROLL = 0; | |
| 109 | + | |
| 110 | + /** | |
| 111 | + * Constant representing scrolling by a "block" (like scrolling | |
| 112 | + * with page-up, page-down keys) | |
| 113 | + * | |
| 114 | + * @see #getScrollType | |
| 115 | + */ | |
| 116 | + public static final int WHEEL_BLOCK_SCROLL = 1; | |
| 117 | + | |
| 118 | + /** | |
| 119 | + * Indicates what sort of scrolling should take place in response to this | |
| 120 | + * event, based on platform settings. Legal values are: | |
| 121 | + * <ul> | |
| 122 | + * <li> WHEEL_UNIT_SCROLL | |
| 123 | + * <li> WHEEL_BLOCK_SCROLL | |
| 124 | + * </ul> | |
| 125 | + * | |
| 126 | + * @see #getScrollType | |
| 127 | + */ | |
| 128 | + int scrollType; | |
| 129 | + | |
| 130 | + /** | |
| 131 | + * Only valid for scrollType WHEEL_UNIT_SCROLL. | |
| 132 | + * Indicates number of units that should be scrolled per | |
| 133 | + * click of mouse wheel rotation, based on platform settings. | |
| 134 | + * | |
| 135 | + * @see #getScrollAmount | |
| 136 | + * @see #getScrollType | |
| 137 | + */ | |
| 138 | + int scrollAmount; | |
| 139 | + | |
| 140 | + /** | |
| 141 | + * Indicates how far the mouse wheel was rotated. | |
| 142 | + * | |
| 143 | + * @see #getWheelRotation | |
| 144 | + */ | |
| 145 | + int wheelRotation; | |
| 146 | + | |
| 147 | + /** | |
| 148 | + * Indicates how far the mouse wheel was rotated. | |
| 149 | + * | |
| 150 | + * @see #getPreciseWheelRotation | |
| 151 | + */ | |
| 152 | + double preciseWheelRotation; | |
| 153 | + | |
| 154 | + /* | |
| 155 | + * serialVersionUID | |
| 156 | + */ | |
| 157 | + | |
| 158 | + private static final long serialVersionUID = 6459879390515399677L; | |
| 159 | + | |
| 160 | + /** | |
| 161 | + * Constructs a <code>MouseWheelEvent</code> object with the | |
| 162 | + * specified source component, type, modifiers, coordinates, | |
| 163 | + * scroll type, scroll amount, and wheel rotation. | |
| 164 | + * <p>Absolute coordinates xAbs and yAbs are set to source's location on screen plus | |
| 165 | + * relative coordinates x and y. xAbs and yAbs are set to zero if the source is not showing. | |
| 166 | + * <p>Note that passing in an invalid <code>id</code> results in | |
| 167 | + * unspecified behavior. This method throws an | |
| 168 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 169 | + * is <code>null</code>. | |
| 170 | + * | |
| 171 | + * @param source the <code>Component</code> that originated | |
| 172 | + * the event | |
| 173 | + * @param id the integer that identifies the event | |
| 174 | + * @param when a long that gives the time the event occurred | |
| 175 | + * @param modifiers the modifier keys down during event | |
| 176 | + * (shift, ctrl, alt, meta) | |
| 177 | + * @param x the horizontal x coordinate for the mouse location | |
| 178 | + * @param y the vertical y coordinate for the mouse location | |
| 179 | + * @param clickCount the number of mouse clicks associated with event | |
| 180 | + * @param popupTrigger a boolean, true if this event is a trigger for a | |
| 181 | + * popup-menu | |
| 182 | + * @param scrollType the type of scrolling which should take place in | |
| 183 | + * response to this event; valid values are | |
| 184 | + * <code>WHEEL_UNIT_SCROLL</code> and | |
| 185 | + * <code>WHEEL_BLOCK_SCROLL</code> | |
| 186 | + * @param scrollAmount for scrollType <code>WHEEL_UNIT_SCROLL</code>, | |
| 187 | + * the number of units to be scrolled | |
| 188 | + * @param wheelRotation the integer number of "clicks" by which the mouse | |
| 189 | + * wheel was rotated | |
| 190 | + * | |
| 191 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 192 | + * @see MouseEvent#MouseEvent(java.awt.Component, int, long, int, int, int, int, boolean) | |
| 193 | + * @see MouseEvent#MouseEvent(java.awt.Component, int, long, int, int, int, int, int, int, boolean, int) | |
| 194 | + */ | |
| 195 | + public MouseWheelEvent (Component source, int id, long when, int modifiers, | |
| 196 | + int x, int y, int clickCount, boolean popupTrigger, | |
| 197 | + int scrollType, int scrollAmount, int wheelRotation) { | |
| 198 | + | |
| 199 | + this(source, id, when, modifiers, x, y, 0, 0, clickCount, | |
| 200 | + popupTrigger, scrollType, scrollAmount, wheelRotation); | |
| 201 | + } | |
| 202 | + | |
| 203 | + /** | |
| 204 | + * Constructs a <code>MouseWheelEvent</code> object with the | |
| 205 | + * specified source component, type, modifiers, coordinates, | |
| 206 | + * absolute coordinates, scroll type, scroll amount, and wheel rotation. | |
| 207 | + * <p>Note that passing in an invalid <code>id</code> results in | |
| 208 | + * unspecified behavior. This method throws an | |
| 209 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 210 | + * is <code>null</code>.<p> | |
| 211 | + * Even if inconsistent values for relative and absolute coordinates are | |
| 212 | + * passed to the constructor, the MouseWheelEvent instance is still | |
| 213 | + * created and no exception is thrown. | |
| 214 | + * | |
| 215 | + * @param source the <code>Component</code> that originated | |
| 216 | + * the event | |
| 217 | + * @param id the integer that identifies the event | |
| 218 | + * @param when a long that gives the time the event occurred | |
| 219 | + * @param modifiers the modifier keys down during event | |
| 220 | + * (shift, ctrl, alt, meta) | |
| 221 | + * @param x the horizontal x coordinate for the mouse location | |
| 222 | + * @param y the vertical y coordinate for the mouse location | |
| 223 | + * @param xAbs the absolute horizontal x coordinate for the mouse location | |
| 224 | + * @param yAbs the absolute vertical y coordinate for the mouse location | |
| 225 | + * @param clickCount the number of mouse clicks associated with event | |
| 226 | + * @param popupTrigger a boolean, true if this event is a trigger for a | |
| 227 | + * popup-menu | |
| 228 | + * @param scrollType the type of scrolling which should take place in | |
| 229 | + * response to this event; valid values are | |
| 230 | + * <code>WHEEL_UNIT_SCROLL</code> and | |
| 231 | + * <code>WHEEL_BLOCK_SCROLL</code> | |
| 232 | + * @param scrollAmount for scrollType <code>WHEEL_UNIT_SCROLL</code>, | |
| 233 | + * the number of units to be scrolled | |
| 234 | + * @param wheelRotation the integer number of "clicks" by which the mouse | |
| 235 | + * wheel was rotated | |
| 236 | + * | |
| 237 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 238 | + * @see MouseEvent#MouseEvent(java.awt.Component, int, long, int, int, int, int, boolean) | |
| 239 | + * @see MouseEvent#MouseEvent(java.awt.Component, int, long, int, int, int, int, int, int, boolean, int) | |
| 240 | + * @since 1.6 | |
| 241 | + */ | |
| 242 | + public MouseWheelEvent (Component source, int id, long when, int modifiers, | |
| 243 | + int x, int y, int xAbs, int yAbs, int clickCount, boolean popupTrigger, | |
| 244 | + int scrollType, int scrollAmount, int wheelRotation) { | |
| 245 | + | |
| 246 | + this(source, id, when, modifiers, x, y, xAbs, yAbs, clickCount, popupTrigger, | |
| 247 | + scrollType, scrollAmount, wheelRotation, wheelRotation); | |
| 248 | + | |
| 249 | + } | |
| 250 | + | |
| 251 | + | |
| 252 | + /** | |
| 253 | + * Constructs a <code>MouseWheelEvent</code> object with the specified | |
| 254 | + * source component, type, modifiers, coordinates, absolute coordinates, | |
| 255 | + * scroll type, scroll amount, and wheel rotation. | |
| 256 | + * <p>Note that passing in an invalid <code>id</code> parameter results | |
| 257 | + * in unspecified behavior. This method throws an | |
| 258 | + * <code>IllegalArgumentException</code> if <code>source</code> equals | |
| 259 | + * <code>null</code>. | |
| 260 | + * <p>Even if inconsistent values for relative and absolute coordinates | |
| 261 | + * are passed to the constructor, a <code>MouseWheelEvent</code> instance | |
| 262 | + * is still created and no exception is thrown. | |
| 263 | + * | |
| 264 | + * @param source the <code>Component</code> that originated the event | |
| 265 | + * @param id the integer value that identifies the event | |
| 266 | + * @param when a long value that gives the time when the event occurred | |
| 267 | + * @param modifiers the modifier keys down during event | |
| 268 | + * (shift, ctrl, alt, meta) | |
| 269 | + * @param x the horizontal <code>x</code> coordinate for the | |
| 270 | + * mouse location | |
| 271 | + * @param y the vertical <code>y</code> coordinate for the | |
| 272 | + * mouse location | |
| 273 | + * @param xAbs the absolute horizontal <code>x</code> coordinate for | |
| 274 | + * the mouse location | |
| 275 | + * @param yAbs the absolute vertical <code>y</code> coordinate for | |
| 276 | + * the mouse location | |
| 277 | + * @param clickCount the number of mouse clicks associated with the event | |
| 278 | + * @param popupTrigger a boolean value, <code>true</code> if this event is a trigger | |
| 279 | + * for a popup-menu | |
| 280 | + * @param scrollType the type of scrolling which should take place in | |
| 281 | + * response to this event; valid values are | |
| 282 | + * <code>WHEEL_UNIT_SCROLL</code> and | |
| 283 | + * <code>WHEEL_BLOCK_SCROLL</code> | |
| 284 | + * @param scrollAmount for scrollType <code>WHEEL_UNIT_SCROLL</code>, | |
| 285 | + * the number of units to be scrolled | |
| 286 | + * @param wheelRotation the integer number of "clicks" by which the mouse wheel | |
| 287 | + * was rotated | |
| 288 | + * @param preciseWheelRotation the double number of "clicks" by which the mouse wheel | |
| 289 | + * was rotated | |
| 290 | + * | |
| 291 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 292 | + * @see MouseEvent#MouseEvent(java.awt.Component, int, long, int, int, int, int, boolean) | |
| 293 | + * @see MouseEvent#MouseEvent(java.awt.Component, int, long, int, int, int, int, int, int, boolean, int) | |
| 294 | + * @since 1.7 | |
| 295 | + */ | |
| 296 | + public MouseWheelEvent (Component source, int id, long when, int modifiers, | |
| 297 | + int x, int y, int xAbs, int yAbs, int clickCount, boolean popupTrigger, | |
| 298 | + int scrollType, int scrollAmount, int wheelRotation, double preciseWheelRotation) { | |
| 299 | + | |
| 300 | + super(source, id, when, modifiers, x, y, xAbs, yAbs, clickCount, | |
| 301 | + popupTrigger, MouseEvent.NOBUTTON); | |
| 302 | + | |
| 303 | + this.scrollType = scrollType; | |
| 304 | + this.scrollAmount = scrollAmount; | |
| 305 | + this.wheelRotation = wheelRotation; | |
| 306 | + this.preciseWheelRotation = preciseWheelRotation; | |
| 307 | + | |
| 308 | + } | |
| 309 | + | |
| 310 | + /** | |
| 311 | + * Returns the type of scrolling that should take place in response to this | |
| 312 | + * event. This is determined by the native platform. Legal values are: | |
| 313 | + * <ul> | |
| 314 | + * <li> MouseWheelEvent.WHEEL_UNIT_SCROLL | |
| 315 | + * <li> MouseWheelEvent.WHEEL_BLOCK_SCROLL | |
| 316 | + * </ul> | |
| 317 | + * | |
| 318 | + * @return either MouseWheelEvent.WHEEL_UNIT_SCROLL or | |
| 319 | + * MouseWheelEvent.WHEEL_BLOCK_SCROLL, depending on the configuration of | |
| 320 | + * the native platform. | |
| 321 | + * @see java.awt.Adjustable#getUnitIncrement | |
| 322 | + * @see java.awt.Adjustable#getBlockIncrement | |
| 323 | + * @see javax.swing.Scrollable#getScrollableUnitIncrement | |
| 324 | + * @see javax.swing.Scrollable#getScrollableBlockIncrement | |
| 325 | + */ | |
| 326 | + public int getScrollType() { | |
| 327 | + return scrollType; | |
| 328 | + } | |
| 329 | + | |
| 330 | + /** | |
| 331 | + * Returns the number of units that should be scrolled per | |
| 332 | + * click of mouse wheel rotation. | |
| 333 | + * Only valid if <code>getScrollType</code> returns | |
| 334 | + * <code>MouseWheelEvent.WHEEL_UNIT_SCROLL</code> | |
| 335 | + * | |
| 336 | + * @return number of units to scroll, or an undefined value if | |
| 337 | + * <code>getScrollType</code> returns | |
| 338 | + * <code>MouseWheelEvent.WHEEL_BLOCK_SCROLL</code> | |
| 339 | + * @see #getScrollType | |
| 340 | + */ | |
| 341 | + public int getScrollAmount() { | |
| 342 | + return scrollAmount; | |
| 343 | + } | |
| 344 | + | |
| 345 | + /** | |
| 346 | + * Returns the number of "clicks" the mouse wheel was rotated, as an integer. | |
| 347 | + * A partial rotation may occur if the mouse supports a high-resolution wheel. | |
| 348 | + * In this case, the method returns zero until a full "click" has been accumulated. | |
| 349 | + * | |
| 350 | + * @return negative values if the mouse wheel was rotated up/away from | |
| 351 | + * the user, and positive values if the mouse wheel was rotated down/ | |
| 352 | + * towards the user | |
| 353 | + * @see #getPreciseWheelRotation | |
| 354 | + */ | |
| 355 | + public int getWheelRotation() { | |
| 356 | + return wheelRotation; | |
| 357 | + } | |
| 358 | + | |
| 359 | + /** | |
| 360 | + * Returns the number of "clicks" the mouse wheel was rotated, as a double. | |
| 361 | + * A partial rotation may occur if the mouse supports a high-resolution wheel. | |
| 362 | + * In this case, the return value will include a fractional "click". | |
| 363 | + * | |
| 364 | + * @return negative values if the mouse wheel was rotated up or away from | |
| 365 | + * the user, and positive values if the mouse wheel was rotated down or | |
| 366 | + * towards the user | |
| 367 | + * @see #getWheelRotation | |
| 368 | + * @since 1.7 | |
| 369 | + */ | |
| 370 | + public double getPreciseWheelRotation() { | |
| 371 | + return preciseWheelRotation; | |
| 372 | + } | |
| 373 | + | |
| 374 | + /** | |
| 375 | + * This is a convenience method to aid in the implementation of | |
| 376 | + * the common-case MouseWheelListener - to scroll a ScrollPane or | |
| 377 | + * JScrollPane by an amount which conforms to the platform settings. | |
| 378 | + * (Note, however, that <code>ScrollPane</code> and | |
| 379 | + * <code>JScrollPane</code> already have this functionality built in.) | |
| 380 | + * <P> | |
| 381 | + * This method returns the number of units to scroll when scroll type is | |
| 382 | + * MouseWheelEvent.WHEEL_UNIT_SCROLL, and should only be called if | |
| 383 | + * <code>getScrollType</code> returns MouseWheelEvent.WHEEL_UNIT_SCROLL. | |
| 384 | + * <P> | |
| 385 | + * Direction of scroll, amount of wheel movement, | |
| 386 | + * and platform settings for wheel scrolling are all accounted for. | |
| 387 | + * This method does not and cannot take into account value of the | |
| 388 | + * Adjustable/Scrollable unit increment, as this will vary among | |
| 389 | + * scrolling components. | |
| 390 | + * <P> | |
| 391 | + * A simplified example of how this method might be used in a | |
| 392 | + * listener: | |
| 393 | + * <pre> | |
| 394 | + * mouseWheelMoved(MouseWheelEvent event) { | |
| 395 | + * ScrollPane sp = getScrollPaneFromSomewhere(); | |
| 396 | + * Adjustable adj = sp.getVAdjustable() | |
| 397 | + * if (MouseWheelEvent.getScrollType() == WHEEL_UNIT_SCROLL) { | |
| 398 | + * int totalScrollAmount = | |
| 399 | + * event.getUnitsToScroll() * | |
| 400 | + * adj.getUnitIncrement(); | |
| 401 | + * adj.setValue(adj.getValue() + totalScrollAmount); | |
| 402 | + * } | |
| 403 | + * } | |
| 404 | + * </pre> | |
| 405 | + * | |
| 406 | + * @return the number of units to scroll based on the direction and amount | |
| 407 | + * of mouse wheel rotation, and on the wheel scrolling settings of the | |
| 408 | + * native platform | |
| 409 | + * @see #getScrollType | |
| 410 | + * @see #getScrollAmount | |
| 411 | + * @see MouseWheelListener | |
| 412 | + * @see java.awt.Adjustable | |
| 413 | + * @see java.awt.Adjustable#getUnitIncrement | |
| 414 | + * @see javax.swing.Scrollable | |
| 415 | + * @see javax.swing.Scrollable#getScrollableUnitIncrement | |
| 416 | + * @see java.awt.ScrollPane | |
| 417 | + * @see java.awt.ScrollPane#setWheelScrollingEnabled | |
| 418 | + * @see javax.swing.JScrollPane | |
| 419 | + * @see javax.swing.JScrollPane#setWheelScrollingEnabled | |
| 420 | + */ | |
| 421 | + public int getUnitsToScroll() { | |
| 422 | + return scrollAmount * wheelRotation; | |
| 423 | + } | |
| 424 | + | |
| 425 | + /** | |
| 426 | + * Returns a parameter string identifying this event. | |
| 427 | + * This method is useful for event-logging and for debugging. | |
| 428 | + * | |
| 429 | + * @return a string identifying the event and its attributes | |
| 430 | + */ | |
| 431 | + public String paramString() { | |
| 432 | + String scrollTypeStr = null; | |
| 433 | + | |
| 434 | + if (getScrollType() == WHEEL_UNIT_SCROLL) { | |
| 435 | + scrollTypeStr = "WHEEL_UNIT_SCROLL"; | |
| 436 | + } | |
| 437 | + else if (getScrollType() == WHEEL_BLOCK_SCROLL) { | |
| 438 | + scrollTypeStr = "WHEEL_BLOCK_SCROLL"; | |
| 439 | + } | |
| 440 | + else { | |
| 441 | + scrollTypeStr = "unknown scroll type"; | |
| 442 | + } | |
| 443 | + return super.paramString()+",scrollType="+scrollTypeStr+ | |
| 444 | + ",scrollAmount="+getScrollAmount()+",wheelRotation="+ | |
| 445 | + getWheelRotation()+",preciseWheelRotation="+getPreciseWheelRotation(); | |
| 446 | + } | |
| 447 | +} | |
Binary file not shown.
| @@ -0,0 +1,58 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListener; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * The listener interface for receiving mouse wheel events on a component. | |
| 32 | + * (For clicks and other mouse events, use the <code>MouseListener</code>. | |
| 33 | + * For mouse movement and drags, use the <code>MouseMotionListener</code>.) | |
| 34 | + * <P> | |
| 35 | + * The class that is interested in processing a mouse wheel event | |
| 36 | + * implements this interface (and all the methods it contains). | |
| 37 | + * <P> | |
| 38 | + * The listener object created from that class is then registered with a | |
| 39 | + * component using the component's <code>addMouseWheelListener</code> | |
| 40 | + * method. A mouse wheel event is generated when the mouse wheel is rotated. | |
| 41 | + * When a mouse wheel event occurs, that object's <code>mouseWheelMoved</code> | |
| 42 | + * method is invoked. | |
| 43 | + * <p> | |
| 44 | + * For information on how mouse wheel events are dispatched, see | |
| 45 | + * the class description for {@link MouseWheelEvent}. | |
| 46 | + * | |
| 47 | + * @author Brent Christian | |
| 48 | + * @see MouseWheelEvent | |
| 49 | + * @since 1.4 | |
| 50 | + */ | |
| 51 | +public interface MouseWheelListener extends EventListener { | |
| 52 | + | |
| 53 | + /** | |
| 54 | + * Invoked when the mouse wheel is rotated. | |
| 55 | + * @see MouseWheelEvent | |
| 56 | + */ | |
| 57 | + public void mouseWheelMoved(MouseWheelEvent e); | |
| 58 | +} | |
Binary file not shown.
| @@ -0,0 +1,59 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1998, 2002, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +class NativeLibLoader { | |
| 29 | + | |
| 30 | + /** | |
| 31 | + * This is copied from java.awt.Toolkit since we need the library | |
| 32 | + * loaded in sun.awt.image also: | |
| 33 | + * | |
| 34 | + * WARNING: This is a temporary workaround for a problem in the | |
| 35 | + * way the AWT loads native libraries. A number of classes in this | |
| 36 | + * package (sun.awt.image) have a native method, initIDs(), | |
| 37 | + * which initializes | |
| 38 | + * the JNI field and method ids used in the native portion of | |
| 39 | + * their implementation. | |
| 40 | + * | |
| 41 | + * Since the use and storage of these ids is done by the | |
| 42 | + * implementation libraries, the implementation of these method is | |
| 43 | + * provided by the particular AWT implementations (for example, | |
| 44 | + * "Toolkit"s/Peer), such as Motif, Microsoft Windows, or Tiny. The | |
| 45 | + * problem is that this means that the native libraries must be | |
| 46 | + * loaded by the java.* classes, which do not necessarily know the | |
| 47 | + * names of the libraries to load. A better way of doing this | |
| 48 | + * would be to provide a separate library which defines java.awt.* | |
| 49 | + * initIDs, and exports the relevant symbols out to the | |
| 50 | + * implementation libraries. | |
| 51 | + * | |
| 52 | + * For now, we know it's done by the implementation, and we assume | |
| 53 | + * that the name of the library is "awt". -br. | |
| 54 | + */ | |
| 55 | + static void loadLibraries() { | |
| 56 | + java.security.AccessController.doPrivileged( | |
| 57 | + new sun.security.action.LoadLibraryAction("awt")); | |
| 58 | + } | |
| 59 | +} | |
Binary file not shown.
| @@ -0,0 +1,139 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.awt.Component; | |
| 29 | +import java.awt.Rectangle; | |
| 30 | + | |
| 31 | +/** | |
| 32 | + * The component-level paint event. | |
| 33 | + * This event is a special type which is used to ensure that | |
| 34 | + * paint/update method calls are serialized along with the other | |
| 35 | + * events delivered from the event queue. This event is not | |
| 36 | + * designed to be used with the Event Listener model; programs | |
| 37 | + * should continue to override paint/update methods in order | |
| 38 | + * render themselves properly. | |
| 39 | + * <p> | |
| 40 | + * An unspecified behavior will be caused if the {@code id} parameter | |
| 41 | + * of any particular {@code PaintEvent} instance is not | |
| 42 | + * in the range from {@code PAINT_FIRST} to {@code PAINT_LAST}. | |
| 43 | + * | |
| 44 | + * @author Amy Fowler | |
| 45 | + * @since 1.1 | |
| 46 | + */ | |
| 47 | +public class PaintEvent extends ComponentEvent { | |
| 48 | + | |
| 49 | + /** | |
| 50 | + * Marks the first integer id for the range of paint event ids. | |
| 51 | + */ | |
| 52 | + public static final int PAINT_FIRST = 800; | |
| 53 | + | |
| 54 | + /** | |
| 55 | + * Marks the last integer id for the range of paint event ids. | |
| 56 | + */ | |
| 57 | + public static final int PAINT_LAST = 801; | |
| 58 | + | |
| 59 | + /** | |
| 60 | + * The paint event type. | |
| 61 | + */ | |
| 62 | + public static final int PAINT = PAINT_FIRST; | |
| 63 | + | |
| 64 | + /** | |
| 65 | + * The update event type. | |
| 66 | + */ | |
| 67 | + public static final int UPDATE = PAINT_FIRST + 1; //801 | |
| 68 | + | |
| 69 | + /** | |
| 70 | + * This is the rectangle that represents the area on the source | |
| 71 | + * component that requires a repaint. | |
| 72 | + * This rectangle should be non null. | |
| 73 | + * | |
| 74 | + * @serial | |
| 75 | + * @see java.awt.Rectangle | |
| 76 | + * @see #setUpdateRect(Rectangle) | |
| 77 | + * @see #getUpdateRect() | |
| 78 | + */ | |
| 79 | + Rectangle updateRect; | |
| 80 | + | |
| 81 | + /* | |
| 82 | + * JDK 1.1 serialVersionUID | |
| 83 | + */ | |
| 84 | + private static final long serialVersionUID = 1267492026433337593L; | |
| 85 | + | |
| 86 | + /** | |
| 87 | + * Constructs a <code>PaintEvent</code> object with the specified | |
| 88 | + * source component and type. | |
| 89 | + * <p> This method throws an | |
| 90 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 91 | + * is <code>null</code>. | |
| 92 | + * | |
| 93 | + * @param source The object where the event originated | |
| 94 | + * @param id The integer that identifies the event type. | |
| 95 | + * For information on allowable values, see | |
| 96 | + * the class description for {@link PaintEvent} | |
| 97 | + * @param updateRect The rectangle area which needs to be repainted | |
| 98 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 99 | + * @see #getSource() | |
| 100 | + * @see #getID() | |
| 101 | + * @see #getUpdateRect() | |
| 102 | + */ | |
| 103 | + public PaintEvent(Component source, int id, Rectangle updateRect) { | |
| 104 | + super(source, id); | |
| 105 | + this.updateRect = updateRect; | |
| 106 | + } | |
| 107 | + | |
| 108 | + /** | |
| 109 | + * Returns the rectangle representing the area which needs to be | |
| 110 | + * repainted in response to this event. | |
| 111 | + */ | |
| 112 | + public Rectangle getUpdateRect() { | |
| 113 | + return updateRect; | |
| 114 | + } | |
| 115 | + | |
| 116 | + /** | |
| 117 | + * Sets the rectangle representing the area which needs to be | |
| 118 | + * repainted in response to this event. | |
| 119 | + * @param updateRect the rectangle area which needs to be repainted | |
| 120 | + */ | |
| 121 | + public void setUpdateRect(Rectangle updateRect) { | |
| 122 | + this.updateRect = updateRect; | |
| 123 | + } | |
| 124 | + | |
| 125 | + public String paramString() { | |
| 126 | + String typeStr; | |
| 127 | + switch(id) { | |
| 128 | + case PAINT: | |
| 129 | + typeStr = "PAINT"; | |
| 130 | + break; | |
| 131 | + case UPDATE: | |
| 132 | + typeStr = "UPDATE"; | |
| 133 | + break; | |
| 134 | + default: | |
| 135 | + typeStr = "unknown type"; | |
| 136 | + } | |
| 137 | + return typeStr + ",updateRect="+(updateRect != null ? updateRect.toString() : "null"); | |
| 138 | + } | |
| 139 | +} | |
Binary file not shown.
| @@ -0,0 +1,113 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.awt.AWTEvent; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * A semantic event which indicates that an object's text changed. | |
| 32 | + * This high-level event is generated by an object (such as a TextComponent) | |
| 33 | + * when its text changes. The event is passed to | |
| 34 | + * every <code>TextListener</code> object which registered to receive such | |
| 35 | + * events using the component's <code>addTextListener</code> method. | |
| 36 | + * <P> | |
| 37 | + * The object that implements the <code>TextListener</code> interface gets | |
| 38 | + * this <code>TextEvent</code> when the event occurs. The listener is | |
| 39 | + * spared the details of processing individual mouse movements and key strokes | |
| 40 | + * Instead, it can process a "meaningful" (semantic) event like "text changed". | |
| 41 | + * <p> | |
| 42 | + * An unspecified behavior will be caused if the {@code id} parameter | |
| 43 | + * of any particular {@code TextEvent} instance is not | |
| 44 | + * in the range from {@code TEXT_FIRST} to {@code TEXT_LAST}. | |
| 45 | + * | |
| 46 | + * @author Georges Saab | |
| 47 | + * | |
| 48 | + * @see java.awt.TextComponent | |
| 49 | + * @see TextListener | |
| 50 | + * | |
| 51 | + * @since 1.1 | |
| 52 | + */ | |
| 53 | + | |
| 54 | +public class TextEvent extends AWTEvent { | |
| 55 | + | |
| 56 | + /** | |
| 57 | + * The first number in the range of ids used for text events. | |
| 58 | + */ | |
| 59 | + public static final int TEXT_FIRST = 900; | |
| 60 | + | |
| 61 | + /** | |
| 62 | + * The last number in the range of ids used for text events. | |
| 63 | + */ | |
| 64 | + public static final int TEXT_LAST = 900; | |
| 65 | + | |
| 66 | + /** | |
| 67 | + * This event id indicates that object's text changed. | |
| 68 | + */ | |
| 69 | + public static final int TEXT_VALUE_CHANGED = TEXT_FIRST; | |
| 70 | + | |
| 71 | + /* | |
| 72 | + * JDK 1.1 serialVersionUID | |
| 73 | + */ | |
| 74 | + private static final long serialVersionUID = 6269902291250941179L; | |
| 75 | + | |
| 76 | + /** | |
| 77 | + * Constructs a <code>TextEvent</code> object. | |
| 78 | + * <p> This method throws an | |
| 79 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 80 | + * is <code>null</code>. | |
| 81 | + * | |
| 82 | + * @param source The (<code>TextComponent</code>) object that | |
| 83 | + * originated the event | |
| 84 | + * @param id An integer that identifies the event type. | |
| 85 | + * For information on allowable values, see | |
| 86 | + * the class description for {@link TextEvent} | |
| 87 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 88 | + * @see #getSource() | |
| 89 | + * @see #getID() | |
| 90 | + */ | |
| 91 | + public TextEvent(Object source, int id) { | |
| 92 | + super(source, id); | |
| 93 | + } | |
| 94 | + | |
| 95 | + | |
| 96 | + /** | |
| 97 | + * Returns a parameter string identifying this text event. | |
| 98 | + * This method is useful for event-logging and for debugging. | |
| 99 | + * | |
| 100 | + * @return a string identifying the event and its attributes | |
| 101 | + */ | |
| 102 | + public String paramString() { | |
| 103 | + String typeStr; | |
| 104 | + switch(id) { | |
| 105 | + case TEXT_VALUE_CHANGED: | |
| 106 | + typeStr = "TEXT_VALUE_CHANGED"; | |
| 107 | + break; | |
| 108 | + default: | |
| 109 | + typeStr = "unknown type"; | |
| 110 | + } | |
| 111 | + return typeStr; | |
| 112 | + } | |
| 113 | +} | |
Binary file not shown.
| @@ -0,0 +1,55 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListener; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * The listener interface for receiving text events. | |
| 32 | + * | |
| 33 | + * The class that is interested in processing a text event | |
| 34 | + * implements this interface. The object created with that | |
| 35 | + * class is then registered with a component using the | |
| 36 | + * component's <code>addTextListener</code> method. When the | |
| 37 | + * component's text changes, the listener object's | |
| 38 | + * <code>textValueChanged</code> method is invoked. | |
| 39 | + * | |
| 40 | + * @author Georges Saab | |
| 41 | + * | |
| 42 | + * @see TextEvent | |
| 43 | + * | |
| 44 | + * @since 1.1 | |
| 45 | + */ | |
| 46 | +public interface TextListener extends EventListener { | |
| 47 | + | |
| 48 | + /** | |
| 49 | + * Invoked when the value of the text has changed. | |
| 50 | + * The code written for this method performs the operations | |
| 51 | + * that need to occur when text changes. | |
| 52 | + */ | |
| 53 | + public void textValueChanged(TextEvent e); | |
| 54 | + | |
| 55 | +} | |
Binary file not shown.
| @@ -0,0 +1,117 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +/** | |
| 29 | + * An abstract adapter class for receiving window events. | |
| 30 | + * The methods in this class are empty. This class exists as | |
| 31 | + * convenience for creating listener objects. | |
| 32 | + * <P> | |
| 33 | + * Extend this class to create a <code>WindowEvent</code> listener | |
| 34 | + * and override the methods for the events of interest. (If you implement the | |
| 35 | + * <code>WindowListener</code> interface, you have to define all of | |
| 36 | + * the methods in it. This abstract class defines null methods for them | |
| 37 | + * all, so you can only have to define methods for events you care about.) | |
| 38 | + * <P> | |
| 39 | + * Create a listener object using the extended class and then register it with | |
| 40 | + * a Window using the window's <code>addWindowListener</code> | |
| 41 | + * method. When the window's status changes by virtue of being opened, | |
| 42 | + * closed, activated or deactivated, iconified or deiconified, | |
| 43 | + * the relevant method in the listener | |
| 44 | + * object is invoked, and the <code>WindowEvent</code> is passed to it. | |
| 45 | + * | |
| 46 | + * @see WindowEvent | |
| 47 | + * @see WindowListener | |
| 48 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/windowlistener.html">Tutorial: Writing a Window Listener</a> | |
| 49 | + * | |
| 50 | + * @author Carl Quinn | |
| 51 | + * @author Amy Fowler | |
| 52 | + * @author David Mendenhall | |
| 53 | + * @since 1.1 | |
| 54 | + */ | |
| 55 | +public abstract class WindowAdapter | |
| 56 | + implements WindowListener, WindowStateListener, WindowFocusListener | |
| 57 | +{ | |
| 58 | + /** | |
| 59 | + * Invoked when a window has been opened. | |
| 60 | + */ | |
| 61 | + public void windowOpened(WindowEvent e) {} | |
| 62 | + | |
| 63 | + /** | |
| 64 | + * Invoked when a window is in the process of being closed. | |
| 65 | + * The close operation can be overridden at this point. | |
| 66 | + */ | |
| 67 | + public void windowClosing(WindowEvent e) {} | |
| 68 | + | |
| 69 | + /** | |
| 70 | + * Invoked when a window has been closed. | |
| 71 | + */ | |
| 72 | + public void windowClosed(WindowEvent e) {} | |
| 73 | + | |
| 74 | + /** | |
| 75 | + * Invoked when a window is iconified. | |
| 76 | + */ | |
| 77 | + public void windowIconified(WindowEvent e) {} | |
| 78 | + | |
| 79 | + /** | |
| 80 | + * Invoked when a window is de-iconified. | |
| 81 | + */ | |
| 82 | + public void windowDeiconified(WindowEvent e) {} | |
| 83 | + | |
| 84 | + /** | |
| 85 | + * Invoked when a window is activated. | |
| 86 | + */ | |
| 87 | + public void windowActivated(WindowEvent e) {} | |
| 88 | + | |
| 89 | + /** | |
| 90 | + * Invoked when a window is de-activated. | |
| 91 | + */ | |
| 92 | + public void windowDeactivated(WindowEvent e) {} | |
| 93 | + | |
| 94 | + /** | |
| 95 | + * Invoked when a window state is changed. | |
| 96 | + * @since 1.4 | |
| 97 | + */ | |
| 98 | + public void windowStateChanged(WindowEvent e) {} | |
| 99 | + | |
| 100 | + /** | |
| 101 | + * Invoked when the Window is set to be the focused Window, which means | |
| 102 | + * that the Window, or one of its subcomponents, will receive keyboard | |
| 103 | + * events. | |
| 104 | + * | |
| 105 | + * @since 1.4 | |
| 106 | + */ | |
| 107 | + public void windowGainedFocus(WindowEvent e) {} | |
| 108 | + | |
| 109 | + /** | |
| 110 | + * Invoked when the Window is no longer the focused Window, which means | |
| 111 | + * that keyboard events will no longer be delivered to the Window or any of | |
| 112 | + * its subcomponents. | |
| 113 | + * | |
| 114 | + * @since 1.4 | |
| 115 | + */ | |
| 116 | + public void windowLostFocus(WindowEvent e) {} | |
| 117 | +} | |
Binary file not shown.
| @@ -0,0 +1,428 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.awt.Window; | |
| 29 | +import sun.awt.AppContext; | |
| 30 | +import sun.awt.SunToolkit; | |
| 31 | + | |
| 32 | +/** | |
| 33 | + * A low-level event that indicates that a window has changed its status. This | |
| 34 | + * low-level event is generated by a Window object when it is opened, closed, | |
| 35 | + * activated, deactivated, iconified, or deiconified, or when focus is | |
| 36 | + * transfered into or out of the Window. | |
| 37 | + * <P> | |
| 38 | + * The event is passed to every <code>WindowListener</code> | |
| 39 | + * or <code>WindowAdapter</code> object which registered to receive such | |
| 40 | + * events using the window's <code>addWindowListener</code> method. | |
| 41 | + * (<code>WindowAdapter</code> objects implement the | |
| 42 | + * <code>WindowListener</code> interface.) Each such listener object | |
| 43 | + * gets this <code>WindowEvent</code> when the event occurs. | |
| 44 | + * <p> | |
| 45 | + * An unspecified behavior will be caused if the {@code id} parameter | |
| 46 | + * of any particular {@code WindowEvent} instance is not | |
| 47 | + * in the range from {@code WINDOW_FIRST} to {@code WINDOW_LAST}. | |
| 48 | + * | |
| 49 | + * @author Carl Quinn | |
| 50 | + * @author Amy Fowler | |
| 51 | + * | |
| 52 | + * @see WindowAdapter | |
| 53 | + * @see WindowListener | |
| 54 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/windowlistener.html">Tutorial: Writing a Window Listener</a> | |
| 55 | + * | |
| 56 | + * @since JDK1.1 | |
| 57 | + */ | |
| 58 | +public class WindowEvent extends ComponentEvent { | |
| 59 | + | |
| 60 | + /** | |
| 61 | + * The first number in the range of ids used for window events. | |
| 62 | + */ | |
| 63 | + public static final int WINDOW_FIRST = 200; | |
| 64 | + | |
| 65 | + /** | |
| 66 | + * The window opened event. This event is delivered only | |
| 67 | + * the first time a window is made visible. | |
| 68 | + */ | |
| 69 | + public static final int WINDOW_OPENED = WINDOW_FIRST; // 200 | |
| 70 | + | |
| 71 | + /** | |
| 72 | + * The "window is closing" event. This event is delivered when | |
| 73 | + * the user attempts to close the window from the window's system menu. | |
| 74 | + * If the program does not explicitly hide or dispose the window | |
| 75 | + * while processing this event, the window close operation will be | |
| 76 | + * cancelled. | |
| 77 | + */ | |
| 78 | + public static final int WINDOW_CLOSING = 1 + WINDOW_FIRST; //Event.WINDOW_DESTROY | |
| 79 | + | |
| 80 | + /** | |
| 81 | + * The window closed event. This event is delivered after | |
| 82 | + * the window has been closed as the result of a call to dispose. | |
| 83 | + */ | |
| 84 | + public static final int WINDOW_CLOSED = 2 + WINDOW_FIRST; | |
| 85 | + | |
| 86 | + /** | |
| 87 | + * The window iconified event. This event is delivered when | |
| 88 | + * the window has been changed from a normal to a minimized state. | |
| 89 | + * For many platforms, a minimized window is displayed as | |
| 90 | + * the icon specified in the window's iconImage property. | |
| 91 | + * @see java.awt.Frame#setIconImage | |
| 92 | + */ | |
| 93 | + public static final int WINDOW_ICONIFIED = 3 + WINDOW_FIRST; //Event.WINDOW_ICONIFY | |
| 94 | + | |
| 95 | + /** | |
| 96 | + * The window deiconified event type. This event is delivered when | |
| 97 | + * the window has been changed from a minimized to a normal state. | |
| 98 | + */ | |
| 99 | + public static final int WINDOW_DEICONIFIED = 4 + WINDOW_FIRST; //Event.WINDOW_DEICONIFY | |
| 100 | + | |
| 101 | + /** | |
| 102 | + * The window-activated event type. This event is delivered when the Window | |
| 103 | + * becomes the active Window. Only a Frame or a Dialog can be the active | |
| 104 | + * Window. The native windowing system may denote the active Window or its | |
| 105 | + * children with special decorations, such as a highlighted title bar. The | |
| 106 | + * active Window is always either the focused Window, or the first Frame or | |
| 107 | + * Dialog that is an owner of the focused Window. | |
| 108 | + */ | |
| 109 | + public static final int WINDOW_ACTIVATED = 5 + WINDOW_FIRST; | |
| 110 | + | |
| 111 | + /** | |
| 112 | + * The window-deactivated event type. This event is delivered when the | |
| 113 | + * Window is no longer the active Window. Only a Frame or a Dialog can be | |
| 114 | + * the active Window. The native windowing system may denote the active | |
| 115 | + * Window or its children with special decorations, such as a highlighted | |
| 116 | + * title bar. The active Window is always either the focused Window, or the | |
| 117 | + * first Frame or Dialog that is an owner of the focused Window. | |
| 118 | + */ | |
| 119 | + public static final int WINDOW_DEACTIVATED = 6 + WINDOW_FIRST; | |
| 120 | + | |
| 121 | + /** | |
| 122 | + * The window-gained-focus event type. This event is delivered when the | |
| 123 | + * Window becomes the focused Window, which means that the Window, or one | |
| 124 | + * of its subcomponents, will receive keyboard events. | |
| 125 | + */ | |
| 126 | + public static final int WINDOW_GAINED_FOCUS = 7 + WINDOW_FIRST; | |
| 127 | + | |
| 128 | + /** | |
| 129 | + * The window-lost-focus event type. This event is delivered when a Window | |
| 130 | + * is no longer the focused Window, which means keyboard events will no | |
| 131 | + * longer be delivered to the Window or any of its subcomponents. | |
| 132 | + */ | |
| 133 | + public static final int WINDOW_LOST_FOCUS = 8 + WINDOW_FIRST; | |
| 134 | + | |
| 135 | + /** | |
| 136 | + * The window-state-changed event type. This event is delivered | |
| 137 | + * when a Window's state is changed by virtue of it being | |
| 138 | + * iconified, maximized etc. | |
| 139 | + * @since 1.4 | |
| 140 | + */ | |
| 141 | + public static final int WINDOW_STATE_CHANGED = 9 + WINDOW_FIRST; | |
| 142 | + | |
| 143 | + /** | |
| 144 | + * The last number in the range of ids used for window events. | |
| 145 | + */ | |
| 146 | + public static final int WINDOW_LAST = WINDOW_STATE_CHANGED; | |
| 147 | + | |
| 148 | + /** | |
| 149 | + * The other Window involved in this focus or activation change. For a | |
| 150 | + * WINDOW_ACTIVATED or WINDOW_GAINED_FOCUS event, this is the Window that | |
| 151 | + * lost activation or focus. For a WINDOW_DEACTIVATED or WINDOW_LOST_FOCUS | |
| 152 | + * event, this is the Window that gained activation or focus. For any other | |
| 153 | + * type of WindowEvent, or if the focus or activation change occurs with a | |
| 154 | + * native application, a Java application in a different VM, or with no | |
| 155 | + * other Window, null is returned. | |
| 156 | + * | |
| 157 | + * @see #getOppositeWindow | |
| 158 | + * @since 1.4 | |
| 159 | + */ | |
| 160 | + transient Window opposite; | |
| 161 | + | |
| 162 | + /** | |
| 163 | + * TBS | |
| 164 | + */ | |
| 165 | + int oldState; | |
| 166 | + int newState; | |
| 167 | + | |
| 168 | + | |
| 169 | + /* | |
| 170 | + * JDK 1.1 serialVersionUID | |
| 171 | + */ | |
| 172 | + private static final long serialVersionUID = -1567959133147912127L; | |
| 173 | + | |
| 174 | + | |
| 175 | + /** | |
| 176 | + * Constructs a <code>WindowEvent</code> object. | |
| 177 | + * <p>This method throws an | |
| 178 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 179 | + * is <code>null</code>. | |
| 180 | + * | |
| 181 | + * @param source The <code>Window</code> object | |
| 182 | + * that originated the event | |
| 183 | + * @param id An integer indicating the type of event. | |
| 184 | + * For information on allowable values, see | |
| 185 | + * the class description for {@link WindowEvent} | |
| 186 | + * @param opposite The other window involved in the focus or activation | |
| 187 | + * change, or <code>null</code> | |
| 188 | + * @param oldState Previous state of the window for window state change event. | |
| 189 | + * See {@code #getOldState()} for allowable values | |
| 190 | + * @param newState New state of the window for window state change event. | |
| 191 | + * See {@code #getNewState()} for allowable values | |
| 192 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 193 | + * @see #getWindow() | |
| 194 | + * @see #getID() | |
| 195 | + * @see #getOppositeWindow() | |
| 196 | + * @see #getOldState() | |
| 197 | + * @see #getNewState() | |
| 198 | + * @since 1.4 | |
| 199 | + */ | |
| 200 | + public WindowEvent(Window source, int id, Window opposite, | |
| 201 | + int oldState, int newState) | |
| 202 | + { | |
| 203 | + super(source, id); | |
| 204 | + this.opposite = opposite; | |
| 205 | + this.oldState = oldState; | |
| 206 | + this.newState = newState; | |
| 207 | + } | |
| 208 | + | |
| 209 | + /** | |
| 210 | + * Constructs a <code>WindowEvent</code> object with the | |
| 211 | + * specified opposite <code>Window</code>. The opposite | |
| 212 | + * <code>Window</code> is the other <code>Window</code> | |
| 213 | + * involved in this focus or activation change. | |
| 214 | + * For a <code>WINDOW_ACTIVATED</code> or | |
| 215 | + * <code>WINDOW_GAINED_FOCUS</code> event, this is the | |
| 216 | + * <code>Window</code> that lost activation or focus. | |
| 217 | + * For a <code>WINDOW_DEACTIVATED</code> or | |
| 218 | + * <code>WINDOW_LOST_FOCUS</code> event, this is the | |
| 219 | + * <code>Window</code> that gained activation or focus. | |
| 220 | + * If this focus change occurs with a native application, with a | |
| 221 | + * Java application in a different VM, or with no other | |
| 222 | + * <code>Window</code>, then the opposite Window is <code>null</code>. | |
| 223 | + * <p>This method throws an | |
| 224 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 225 | + * is <code>null</code>. | |
| 226 | + * | |
| 227 | + * @param source The <code>Window</code> object that | |
| 228 | + * originated the event | |
| 229 | + * @param id An integer indicating the type of event. | |
| 230 | + * For information on allowable values, see | |
| 231 | + * the class description for {@link WindowEvent}. | |
| 232 | + * It is expected that this constructor will not | |
| 233 | + * be used for other then | |
| 234 | + * {@code WINDOW_ACTIVATED},{@code WINDOW_DEACTIVATED}, | |
| 235 | + * {@code WINDOW_GAINED_FOCUS}, or {@code WINDOW_LOST_FOCUS}. | |
| 236 | + * {@code WindowEvent} types, | |
| 237 | + * because the opposite <code>Window</code> of other event types | |
| 238 | + * will always be {@code null}. | |
| 239 | + * @param opposite The other <code>Window</code> involved in the | |
| 240 | + * focus or activation change, or <code>null</code> | |
| 241 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 242 | + * @see #getWindow() | |
| 243 | + * @see #getID() | |
| 244 | + * @see #getOppositeWindow() | |
| 245 | + * @since 1.4 | |
| 246 | + */ | |
| 247 | + public WindowEvent(Window source, int id, Window opposite) { | |
| 248 | + this(source, id, opposite, 0, 0); | |
| 249 | + } | |
| 250 | + | |
| 251 | + /** | |
| 252 | + * Constructs a <code>WindowEvent</code> object with the specified | |
| 253 | + * previous and new window states. | |
| 254 | + * <p>This method throws an | |
| 255 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 256 | + * is <code>null</code>. | |
| 257 | + * | |
| 258 | + * @param source The <code>Window</code> object | |
| 259 | + * that originated the event | |
| 260 | + * @param id An integer indicating the type of event. | |
| 261 | + * For information on allowable values, see | |
| 262 | + * the class description for {@link WindowEvent}. | |
| 263 | + * It is expected that this constructor will not | |
| 264 | + * be used for other then | |
| 265 | + * {@code WINDOW_STATE_CHANGED} | |
| 266 | + * {@code WindowEvent} | |
| 267 | + * types, because the previous and new window | |
| 268 | + * states are meaningless for other event types. | |
| 269 | + * @param oldState An integer representing the previous window state. | |
| 270 | + * See {@code #getOldState()} for allowable values | |
| 271 | + * @param newState An integer representing the new window state. | |
| 272 | + * See {@code #getNewState()} for allowable values | |
| 273 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 274 | + * @see #getWindow() | |
| 275 | + * @see #getID() | |
| 276 | + * @see #getOldState() | |
| 277 | + * @see #getNewState() | |
| 278 | + * @since 1.4 | |
| 279 | + */ | |
| 280 | + public WindowEvent(Window source, int id, int oldState, int newState) { | |
| 281 | + this(source, id, null, oldState, newState); | |
| 282 | + } | |
| 283 | + | |
| 284 | + /** | |
| 285 | + * Constructs a <code>WindowEvent</code> object. | |
| 286 | + * <p>This method throws an | |
| 287 | + * <code>IllegalArgumentException</code> if <code>source</code> | |
| 288 | + * is <code>null</code>. | |
| 289 | + * | |
| 290 | + * @param source The <code>Window</code> object that originated the event | |
| 291 | + * @param id An integer indicating the type of event. | |
| 292 | + * For information on allowable values, see | |
| 293 | + * the class description for {@link WindowEvent}. | |
| 294 | + * @throws IllegalArgumentException if <code>source</code> is null | |
| 295 | + * @see #getWindow() | |
| 296 | + * @see #getID() | |
| 297 | + */ | |
| 298 | + public WindowEvent(Window source, int id) { | |
| 299 | + this(source, id, null, 0, 0); | |
| 300 | + } | |
| 301 | + | |
| 302 | + /** | |
| 303 | + * Returns the originator of the event. | |
| 304 | + * | |
| 305 | + * @return the Window object that originated the event | |
| 306 | + */ | |
| 307 | + public Window getWindow() { | |
| 308 | + return (source instanceof Window) ? (Window)source : null; | |
| 309 | + } | |
| 310 | + | |
| 311 | + /** | |
| 312 | + * Returns the other Window involved in this focus or activation change. | |
| 313 | + * For a WINDOW_ACTIVATED or WINDOW_GAINED_FOCUS event, this is the Window | |
| 314 | + * that lost activation or focus. For a WINDOW_DEACTIVATED or | |
| 315 | + * WINDOW_LOST_FOCUS event, this is the Window that gained activation or | |
| 316 | + * focus. For any other type of WindowEvent, or if the focus or activation | |
| 317 | + * change occurs with a native application, with a Java application in a | |
| 318 | + * different VM or context, or with no other Window, null is returned. | |
| 319 | + * | |
| 320 | + * @return the other Window involved in the focus or activation change, or | |
| 321 | + * null | |
| 322 | + * @since 1.4 | |
| 323 | + */ | |
| 324 | + public Window getOppositeWindow() { | |
| 325 | + if (opposite == null) { | |
| 326 | + return null; | |
| 327 | + } | |
| 328 | + | |
| 329 | + return (SunToolkit.targetToAppContext(opposite) == | |
| 330 | + AppContext.getAppContext()) | |
| 331 | + ? opposite | |
| 332 | + : null; | |
| 333 | + } | |
| 334 | + | |
| 335 | + /** | |
| 336 | + * For <code>WINDOW_STATE_CHANGED</code> events returns the | |
| 337 | + * previous state of the window. The state is | |
| 338 | + * represented as a bitwise mask. | |
| 339 | + * <ul> | |
| 340 | + * <li><code>NORMAL</code> | |
| 341 | + * <br>Indicates that no state bits are set. | |
| 342 | + * <li><code>ICONIFIED</code> | |
| 343 | + * <li><code>MAXIMIZED_HORIZ</code> | |
| 344 | + * <li><code>MAXIMIZED_VERT</code> | |
| 345 | + * <li><code>MAXIMIZED_BOTH</code> | |
| 346 | + * <br>Concatenates <code>MAXIMIZED_HORIZ</code> | |
| 347 | + * and <code>MAXIMIZED_VERT</code>. | |
| 348 | + * </ul> | |
| 349 | + * | |
| 350 | + * @return a bitwise mask of the previous window state | |
| 351 | + * @see java.awt.Frame#getExtendedState() | |
| 352 | + * @since 1.4 | |
| 353 | + */ | |
| 354 | + public int getOldState() { | |
| 355 | + return oldState; | |
| 356 | + } | |
| 357 | + | |
| 358 | + /** | |
| 359 | + * For <code>WINDOW_STATE_CHANGED</code> events returns the | |
| 360 | + * new state of the window. The state is | |
| 361 | + * represented as a bitwise mask. | |
| 362 | + * <ul> | |
| 363 | + * <li><code>NORMAL</code> | |
| 364 | + * <br>Indicates that no state bits are set. | |
| 365 | + * <li><code>ICONIFIED</code> | |
| 366 | + * <li><code>MAXIMIZED_HORIZ</code> | |
| 367 | + * <li><code>MAXIMIZED_VERT</code> | |
| 368 | + * <li><code>MAXIMIZED_BOTH</code> | |
| 369 | + * <br>Concatenates <code>MAXIMIZED_HORIZ</code> | |
| 370 | + * and <code>MAXIMIZED_VERT</code>. | |
| 371 | + * </ul> | |
| 372 | + * | |
| 373 | + * @return a bitwise mask of the new window state | |
| 374 | + * @see java.awt.Frame#getExtendedState() | |
| 375 | + * @since 1.4 | |
| 376 | + */ | |
| 377 | + public int getNewState() { | |
| 378 | + return newState; | |
| 379 | + } | |
| 380 | + | |
| 381 | + /** | |
| 382 | + * Returns a parameter string identifying this event. | |
| 383 | + * This method is useful for event-logging and for debugging. | |
| 384 | + * | |
| 385 | + * @return a string identifying the event and its attributes | |
| 386 | + */ | |
| 387 | + public String paramString() { | |
| 388 | + String typeStr; | |
| 389 | + switch(id) { | |
| 390 | + case WINDOW_OPENED: | |
| 391 | + typeStr = "WINDOW_OPENED"; | |
| 392 | + break; | |
| 393 | + case WINDOW_CLOSING: | |
| 394 | + typeStr = "WINDOW_CLOSING"; | |
| 395 | + break; | |
| 396 | + case WINDOW_CLOSED: | |
| 397 | + typeStr = "WINDOW_CLOSED"; | |
| 398 | + break; | |
| 399 | + case WINDOW_ICONIFIED: | |
| 400 | + typeStr = "WINDOW_ICONIFIED"; | |
| 401 | + break; | |
| 402 | + case WINDOW_DEICONIFIED: | |
| 403 | + typeStr = "WINDOW_DEICONIFIED"; | |
| 404 | + break; | |
| 405 | + case WINDOW_ACTIVATED: | |
| 406 | + typeStr = "WINDOW_ACTIVATED"; | |
| 407 | + break; | |
| 408 | + case WINDOW_DEACTIVATED: | |
| 409 | + typeStr = "WINDOW_DEACTIVATED"; | |
| 410 | + break; | |
| 411 | + case WINDOW_GAINED_FOCUS: | |
| 412 | + typeStr = "WINDOW_GAINED_FOCUS"; | |
| 413 | + break; | |
| 414 | + case WINDOW_LOST_FOCUS: | |
| 415 | + typeStr = "WINDOW_LOST_FOCUS"; | |
| 416 | + break; | |
| 417 | + case WINDOW_STATE_CHANGED: | |
| 418 | + typeStr = "WINDOW_STATE_CHANGED"; | |
| 419 | + break; | |
| 420 | + default: | |
| 421 | + typeStr = "unknown type"; | |
| 422 | + } | |
| 423 | + typeStr += ",opposite=" + getOppositeWindow() | |
| 424 | + + ",oldState=" + oldState + ",newState=" + newState; | |
| 425 | + | |
| 426 | + return typeStr; | |
| 427 | + } | |
| 428 | +} | |
Binary file not shown.
| @@ -0,0 +1,69 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListener; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * The listener interface for receiving <code>WindowEvents</code>, including | |
| 32 | + * <code>WINDOW_GAINED_FOCUS</code> and <code>WINDOW_LOST_FOCUS</code> events. | |
| 33 | + * The class that is interested in processing a <code>WindowEvent</code> | |
| 34 | + * either implements this interface (and | |
| 35 | + * all the methods it contains) or extends the abstract | |
| 36 | + * <code>WindowAdapter</code> class (overriding only the methods of interest). | |
| 37 | + * The listener object created from that class is then registered with a | |
| 38 | + * <code>Window</code> | |
| 39 | + * using the <code>Window</code>'s <code>addWindowFocusListener</code> method. | |
| 40 | + * When the <code>Window</code>'s | |
| 41 | + * status changes by virtue of it being opened, closed, activated, deactivated, | |
| 42 | + * iconified, or deiconified, or by focus being transfered into or out of the | |
| 43 | + * <code>Window</code>, the relevant method in the listener object is invoked, | |
| 44 | + * and the <code>WindowEvent</code> is passed to it. | |
| 45 | + * | |
| 46 | + * @author David Mendenhall | |
| 47 | + * | |
| 48 | + * @see WindowAdapter | |
| 49 | + * @see WindowEvent | |
| 50 | + * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/windowlistener.html">Tutorial: Writing a Window Listener</a> | |
| 51 | + * | |
| 52 | + * @since 1.4 | |
| 53 | + */ | |
| 54 | +public interface WindowFocusListener extends EventListener { | |
| 55 | + | |
| 56 | + /** | |
| 57 | + * Invoked when the Window is set to be the focused Window, which means | |
| 58 | + * that the Window, or one of its subcomponents, will receive keyboard | |
| 59 | + * events. | |
| 60 | + */ | |
| 61 | + public void windowGainedFocus(WindowEvent e); | |
| 62 | + | |
| 63 | + /** | |
| 64 | + * Invoked when the Window is no longer the focused Window, which means | |
| 65 | + * that keyboard events will no longer be delivered to the Window or any of | |
| 66 | + * its subcomponents. | |
| 67 | + */ | |
| 68 | + public void windowLostFocus(WindowEvent e); | |
| 69 | +} | |
Binary file not shown.
| @@ -0,0 +1,103 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 1996, 2003, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListener; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * The listener interface for receiving window events. | |
| 32 | + * The class that is interested in processing a window event | |
| 33 | + * either implements this interface (and all the methods it | |
| 34 | + * contains) or extends the abstract <code>WindowAdapter</code> class | |
| 35 | + * (overriding only the methods of interest). | |
| 36 | + * The listener object created from that class is then registered with a | |
| 37 | + * Window using the window's <code>addWindowListener</code> | |
| 38 | + * method. When the window's status changes by virtue of being opened, | |
| 39 | + * closed, activated or deactivated, iconified or deiconified, | |
| 40 | + * the relevant method in the listener object is invoked, and the | |
| 41 | + * <code>WindowEvent</code> is passed to it. | |
| 42 | + * | |
| 43 | + * @author Carl Quinn | |
| 44 | + * | |
| 45 | + * @see WindowAdapter | |
| 46 | + * @see WindowEvent | |
| 47 | + * @see <a href="http://java.sun.com/docs/books/tutorial/uiswing/events/windowlistener.html">Tutorial: How to Write Window Listeners</a> | |
| 48 | + * | |
| 49 | + * @since 1.1 | |
| 50 | + */ | |
| 51 | +public interface WindowListener extends EventListener { | |
| 52 | + /** | |
| 53 | + * Invoked the first time a window is made visible. | |
| 54 | + */ | |
| 55 | + public void windowOpened(WindowEvent e); | |
| 56 | + | |
| 57 | + /** | |
| 58 | + * Invoked when the user attempts to close the window | |
| 59 | + * from the window's system menu. | |
| 60 | + */ | |
| 61 | + public void windowClosing(WindowEvent e); | |
| 62 | + | |
| 63 | + /** | |
| 64 | + * Invoked when a window has been closed as the result | |
| 65 | + * of calling dispose on the window. | |
| 66 | + */ | |
| 67 | + public void windowClosed(WindowEvent e); | |
| 68 | + | |
| 69 | + /** | |
| 70 | + * Invoked when a window is changed from a normal to a | |
| 71 | + * minimized state. For many platforms, a minimized window | |
| 72 | + * is displayed as the icon specified in the window's | |
| 73 | + * iconImage property. | |
| 74 | + * @see java.awt.Frame#setIconImage | |
| 75 | + */ | |
| 76 | + public void windowIconified(WindowEvent e); | |
| 77 | + | |
| 78 | + /** | |
| 79 | + * Invoked when a window is changed from a minimized | |
| 80 | + * to a normal state. | |
| 81 | + */ | |
| 82 | + public void windowDeiconified(WindowEvent e); | |
| 83 | + | |
| 84 | + /** | |
| 85 | + * Invoked when the Window is set to be the active Window. Only a Frame or | |
| 86 | + * a Dialog can be the active Window. The native windowing system may | |
| 87 | + * denote the active Window or its children with special decorations, such | |
| 88 | + * as a highlighted title bar. The active Window is always either the | |
| 89 | + * focused Window, or the first Frame or Dialog that is an owner of the | |
| 90 | + * focused Window. | |
| 91 | + */ | |
| 92 | + public void windowActivated(WindowEvent e); | |
| 93 | + | |
| 94 | + /** | |
| 95 | + * Invoked when a Window is no longer the active Window. Only a Frame or a | |
| 96 | + * Dialog can be the active Window. The native windowing system may denote | |
| 97 | + * the active Window or its children with special decorations, such as a | |
| 98 | + * highlighted title bar. The active Window is always either the focused | |
| 99 | + * Window, or the first Frame or Dialog that is an owner of the focused | |
| 100 | + * Window. | |
| 101 | + */ | |
| 102 | + public void windowDeactivated(WindowEvent e); | |
| 103 | +} | |
Binary file not shown.
| @@ -0,0 +1,55 @@ | ||
| 1 | +/* | |
| 2 | + * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + * | |
| 5 | + * This code is free software; you can redistribute it and/or modify it | |
| 6 | + * under the terms of the GNU General Public License version 2 only, as | |
| 7 | + * published by the Free Software Foundation. Oracle designates this | |
| 8 | + * particular file as subject to the "Classpath" exception as provided | |
| 9 | + * by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + * | |
| 11 | + * This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + * version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + * accompanied this code). | |
| 16 | + * | |
| 17 | + * You should have received a copy of the GNU General Public License version | |
| 18 | + * 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + * | |
| 21 | + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + * or visit www.oracle.com if you need additional information or have any | |
| 23 | + * questions. | |
| 24 | + */ | |
| 25 | + | |
| 26 | +package java.awt.event; | |
| 27 | + | |
| 28 | +import java.util.EventListener; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * The listener interface for receiving window state events. | |
| 32 | + * <p> | |
| 33 | + * The class that is interested in processing a window state event | |
| 34 | + * either implements this interface (and all the methods it contains) | |
| 35 | + * or extends the abstract <code>WindowAdapter</code> class | |
| 36 | + * (overriding only the methods of interest). | |
| 37 | + * <p> | |
| 38 | + * The listener object created from that class is then registered with | |
| 39 | + * a window using the <code>Window</code>'s | |
| 40 | + * <code>addWindowStateListener</code> method. When the window's | |
| 41 | + * state changes by virtue of being iconified, maximized etc., the | |
| 42 | + * <code>windowStateChanged</code> method in the listener object is | |
| 43 | + * invoked, and the <code>WindowEvent</code> is passed to it. | |
| 44 | + * | |
| 45 | + * @see java.awt.event.WindowAdapter | |
| 46 | + * @see java.awt.event.WindowEvent | |
| 47 | + * | |
| 48 | + * @since 1.4 | |
| 49 | + */ | |
| 50 | +public interface WindowStateListener extends EventListener { | |
| 51 | + /** | |
| 52 | + * Invoked when window state is changed. | |
| 53 | + */ | |
| 54 | + public void windowStateChanged(WindowEvent e); | |
| 55 | +} | |
| @@ -0,0 +1,51 @@ | ||
| 1 | +<../../../../../mkconfig | |
| 2 | + | |
| 3 | +TARG=\ | |
| 4 | + ActionEvent.dis\ | |
| 5 | + ActionListener.dis\ | |
| 6 | + AdjustmentEvent.dis\ | |
| 7 | + AdjustmentListener.dis\ | |
| 8 | + AWTEventListener.dis\ | |
| 9 | + AWTEventListenerProxy.dis\ | |
| 10 | + ComponentAdapter.dis\ | |
| 11 | + ComponentEvent.dis\ | |
| 12 | + ComponentListener.dis\ | |
| 13 | + ContainerAdapter.dis\ | |
| 14 | + ContainerEvent.dis\ | |
| 15 | + ContainerListener.dis\ | |
| 16 | + FocusAdapter.dis\ | |
| 17 | + FocusEvent.dis\ | |
| 18 | + FocusListener.dis\ | |
| 19 | + HierarchyBoundsAdapter.dis\ | |
| 20 | + HierarchyBoundsListener.dis\ | |
| 21 | + HierarchyEvent.dis\ | |
| 22 | + HierarchyListener.dis\ | |
| 23 | + InputEvent.dis\ | |
| 24 | + InputMethodEvent.dis\ | |
| 25 | + InputMethodListener.dis\ | |
| 26 | + InvocationEvent.dis\ | |
| 27 | + ItemEvent.dis\ | |
| 28 | + ItemListener.dis\ | |
| 29 | + KeyAdapter.dis\ | |
| 30 | + KeyEvent.dis\ | |
| 31 | + KeyListener.dis\ | |
| 32 | + MouseAdapter.dis\ | |
| 33 | + MouseEvent.dis\ | |
| 34 | + MouseListener.dis\ | |
| 35 | + MouseMotionAdapter.dis\ | |
| 36 | + MouseMotionListener.dis\ | |
| 37 | + MouseWheelEvent.dis\ | |
| 38 | + MouseWheelListener.dis\ | |
| 39 | + NativeLibLoader.dis\ | |
| 40 | + PaintEvent.dis\ | |
| 41 | + TextEvent.dis\ | |
| 42 | + TextListener.dis\ | |
| 43 | + WindowAdapter.dis\ | |
| 44 | + WindowEvent.dis\ | |
| 45 | + WindowFocusListener.dis\ | |
| 46 | + WindowListener.dis\ | |
| 47 | + WindowStateListener.dis\ | |
| 48 | + | |
| 49 | +DISBIN=$ROOT/java/dis/java/java/java/awt/event | |
| 50 | + | |
| 51 | +<$ROOT/mkfiles/mkjava | |
| @@ -0,0 +1,57 @@ | ||
| 1 | +<!-- | |
| 2 | + Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. | |
| 3 | + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| 4 | + | |
| 5 | + This code is free software; you can redistribute it and/or modify it | |
| 6 | + under the terms of the GNU General Public License version 2 only, as | |
| 7 | + published by the Free Software Foundation. Oracle designates this | |
| 8 | + particular file as subject to the "Classpath" exception as provided | |
| 9 | + by Oracle in the LICENSE file that accompanied this code. | |
| 10 | + | |
| 11 | + This code is distributed in the hope that it will be useful, but WITHOUT | |
| 12 | + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 13 | + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 14 | + version 2 for more details (a copy is included in the LICENSE file that | |
| 15 | + accompanied this code). | |
| 16 | + | |
| 17 | + You should have received a copy of the GNU General Public License version | |
| 18 | + 2 along with this work; if not, write to the Free Software Foundation, | |
| 19 | + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| 20 | + | |
| 21 | + Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| 22 | + or visit www.oracle.com if you need additional information or have any | |
| 23 | + questions. | |
| 24 | +--> | |
| 25 | + | |
| 26 | +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | |
| 27 | +<html> | |
| 28 | +<body bgcolor="white"> | |
| 29 | + | |
| 30 | +Provides interfaces and classes for dealing with different | |
| 31 | +types of events fired by AWT components. See the java.awt.AWTEvent | |
| 32 | +class for details on the AWT event model. Events are fired by event | |
| 33 | +sources. An event listener registers with an event source to receive | |
| 34 | +notifications about the events of a particular type. This package | |
| 35 | +defines events and event listeners, as well as event listener | |
| 36 | +adapters, which are convenience classes to make easier the process of | |
| 37 | +writing event listeners. | |
| 38 | + | |
| 39 | +<!-- | |
| 40 | +<h2>Package Specification</h2> | |
| 41 | + | |
| 42 | +##### FILL IN ANY SPECS NEEDED BY JAVA COMPATIBILITY KIT ##### | |
| 43 | +<ul> | |
| 44 | + <li><a href="">##### REFER TO ANY FRAMEMAKER SPECIFICATION HERE #####</a> | |
| 45 | +</ul> | |
| 46 | + | |
| 47 | +<h2>Related Documentation</h2> | |
| 48 | + | |
| 49 | +For overviews, tutorials, examples, guides, and tool documentation, please see: | |
| 50 | +<ul> | |
| 51 | + <li><a href="">##### REFER TO NON-SPEC DOCUMENTATION HERE #####</a> | |
| 52 | +</ul> | |
| 53 | +--> | |
| 54 | + | |
| 55 | +@since JDK1.1 | |
| 56 | +</body> | |
| 57 | +</html> | |