
src.java.org.jnativehook.keyboard.NativeKeyEvent Maven / Gradle / Ivy
Show all versions of jnativehook Show documentation
/* JNativeHook: Global keyboard and mouse hooking for Java.
* Copyright (C) 2006-2015 Alexander Barker. All Rights Received.
* https://github.com/kwhat/jnativehook/
*
* JNativeHook is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JNativeHook is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*/
package org.jnativehook.keyboard;
// Imports.
import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeInputEvent;
import java.awt.Toolkit;
/**
* An event which indicates that a keystroke occurred at global scope.
*
*
* This low-level event is generated by the native system when a key is pressed
* or released independent of Java component focus. The event is passed to every
* NativeKeyListener
object which has been registered to receive
* global key events using the {@link GlobalScreen#addNativeKeyListener(NativeKeyListener)}
* method. Each NativeKeyListener
object will receive a
* NativeKeyEvent
when the event occurs.
*
*
* All NativeKeyEvent
objects are dependent on the native platform and
* keyboard layout. NATIVE_KEY_PRESSED
and NATIVE_KEY_RELEASED
* events are generated for every key code received by the native system. The key being pressed
* or released is indicated by the getKeyCode method, which returns a virtual key code or
* VC_UNDEFINED
. Please note that {@link #getKeyChar()} for events of type
* NATIVE_KEY_PRESSED
and NATIVE_KEY_RELEASED
will always return
* CHAR_UNDEFINED
.
*
*
* NATIVE_KEY_TYPED
events are produced for NATIVE_KEY_PRESSED
* events that produce valid Unicode characters for the current keyboard layout. The
* {@link #getKeyChar()} method always returns a valid Unicode character for this type of
* event. Please note that {@link #getKeyCode()} will always return VC_UNDEFINED
* for NATIVE_KEY_TYPED
events.
*
*
* Virtual key codes only represent the physical key that has been pressed and
* should not be mistaken with the character mapped to that key by the operating
* system. NATIVE_KEY_PRESSED
and NATIVE_KEY_RELEASED
events
* should only be used to determin phisical key state, while NATIVE_KEY_TYPED
* events can be used to determine the Unicode representation of the NativeKeyEvent
.
*
*
* @author Alexander Barker ([email protected])
* @version 2.0
* @since 1.0
*
* @see GlobalScreen
* @see NativeKeyListener
*/
public class NativeKeyEvent extends NativeInputEvent {
/** The Constant serialVersionUID. */
private static final long serialVersionUID = -1324603336271643339L;
/** The raw native key code. */
private int rawCode;
/** The virtual key code. */
private int keyCode;
/** The Unicode character. */
private char keyChar;
/** The virtual key location. */
private int keyLocation;
/** The first number in the range of ID's used for native key events. */
public static final int NATIVE_KEY_FIRST = 2400;
/** The last number in the range of ID's used for native key events. */
public static final int NATIVE_KEY_LAST = 2402;
/** The "native key typed" event ID. */
public static final int NATIVE_KEY_TYPED = NATIVE_KEY_FIRST;
/** The "native key pressed" event ID. */
public static final int NATIVE_KEY_PRESSED = 1 + NATIVE_KEY_FIRST;
/** The "native key released" event ID. */
public static final int NATIVE_KEY_RELEASED = 2 + NATIVE_KEY_FIRST;
public static final int KEY_LOCATION_UNKNOWN = 0;
public static final int KEY_LOCATION_STANDARD = 1;
public static final int KEY_LOCATION_LEFT = 2;
public static final int KEY_LOCATION_RIGHT = 3;
public static final int KEY_LOCATION_NUMPAD = 4;
public static final int VC_ESCAPE = 0x0001;
/** Constants for the F1 through F24 function keys. */
public static final int VC_F1 = 0x003B;
public static final int VC_F2 = 0x003C;
public static final int VC_F3 = 0x003D;
public static final int VC_F4 = 0x003E;
public static final int VC_F5 = 0x003F;
public static final int VC_F6 = 0x0040;
public static final int VC_F7 = 0x0041;
public static final int VC_F8 = 0x0042;
public static final int VC_F9 = 0x0043;
public static final int VC_F10 = 0x0044;
public static final int VC_F11 = 0x0057;
public static final int VC_F12 = 0x0058;
public static final int VC_F13 = 0x005B;
public static final int VC_F14 = 0x005C;
public static final int VC_F15 = 0x005D;
public static final int VC_F16 = 0x0063;
public static final int VC_F17 = 0x0064;
public static final int VC_F18 = 0x0065;
public static final int VC_F19 = 0x0066;
public static final int VC_F20 = 0x0067;
public static final int VC_F21 = 0x0068;
public static final int VC_F22 = 0x0069;
public static final int VC_F23 = 0x006A;
public static final int VC_F24 = 0x006B;
public static final int VC_BACKQUOTE = 0x0029;
/** VC_0 thru VC_9 */
public static final int VC_1 = 0x0002;
public static final int VC_2 = 0x0003;
public static final int VC_3 = 0x0004;
public static final int VC_4 = 0x0005;
public static final int VC_5 = 0x0006;
public static final int VC_6 = 0x0007;
public static final int VC_7 = 0x0008;
public static final int VC_8 = 0x0009;
public static final int VC_9 = 0x000A;
public static final int VC_0 = 0x000B;
public static final int VC_MINUS = 0x000C; // '-'
public static final int VC_EQUALS = 0x000D; // '='
public static final int VC_BACKSPACE = 0x000E;
public static final int VC_TAB = 0x000F;
public static final int VC_CAPS_LOCK = 0x003A;
/** VC_A thru VC_Z */
public static final int VC_A = 0x001E;
public static final int VC_B = 0x0030;
public static final int VC_C = 0x002E;
public static final int VC_D = 0x0020;
public static final int VC_E = 0x0012;
public static final int VC_F = 0x0021;
public static final int VC_G = 0x0022;
public static final int VC_H = 0x0023;
public static final int VC_I = 0x0017;
public static final int VC_J = 0x0024;
public static final int VC_K = 0x0025;
public static final int VC_L = 0x0026;
public static final int VC_M = 0x0032;
public static final int VC_N = 0x0031;
public static final int VC_O = 0x0018;
public static final int VC_P = 0x0019;
public static final int VC_Q = 0x0010;
public static final int VC_R = 0x0013;
public static final int VC_S = 0x001F;
public static final int VC_T = 0x0014;
public static final int VC_U = 0x0016;
public static final int VC_V = 0x002F;
public static final int VC_W = 0x0011;
public static final int VC_X = 0x002D;
public static final int VC_Y = 0x0015;
public static final int VC_Z = 0x002C;
public static final int VC_OPEN_BRACKET = 0x001A; // '['
public static final int VC_CLOSE_BRACKET = 0x001B; // ']'
public static final int VC_BACK_SLASH = 0x002B; // '\'
public static final int VC_SEMICOLON = 0x0027; // ';'
public static final int VC_QUOTE = 0x0028;
public static final int VC_ENTER = 0x001C;
public static final int VC_COMMA = 0x0033; // ','
public static final int VC_PERIOD = 0x0034; // '.'
public static final int VC_SLASH = 0x0035; // '/'
public static final int VC_SPACE = 0x0039;
public static final int VC_PRINTSCREEN = 0x0E37;
public static final int VC_SCROLL_LOCK = 0x0046;
public static final int VC_PAUSE = 0x0E45;
/** Edit Key Zone */
public static final int VC_INSERT = 0x0E52;
public static final int VC_DELETE = 0x0E53;
public static final int VC_HOME = 0x0E47;
public static final int VC_END = 0x0E4F;
public static final int VC_PAGE_UP = 0x0E49;
public static final int VC_PAGE_DOWN = 0x0E51;
/** Begin Cursor Key Zone */
public static final int VC_UP = 0xE048;
public static final int VC_LEFT = 0xE04B;
public static final int VC_RIGHT = 0xE04D;
public static final int VC_DOWN = 0xE050;
/** Begin Numeric Zone */
public static final int VC_NUM_LOCK = 0x0045;
public static final int VC_KP_DIVIDE = 0x0E35;
public static final int VC_KP_MULTIPLY = 0x0037;
public static final int VC_KP_SUBTRACT = 0x004A;
public static final int VC_KP_EQUALS = 0x0E0D;
public static final int VC_KP_ADD = 0x004E;
public static final int VC_KP_ENTER = 0x0E1C;
public static final int VC_KP_SEPARATOR = 0x0053;
public static final int VC_KP_1 = 0x004F;
public static final int VC_KP_2 = 0x0050;
public static final int VC_KP_3 = 0x0051;
public static final int VC_KP_4 = 0x004B;
public static final int VC_KP_5 = 0x004C;
public static final int VC_KP_6 = 0x004D;
public static final int VC_KP_7 = 0x0047;
public static final int VC_KP_8 = 0x0048;
public static final int VC_KP_9 = 0x0049;
public static final int VC_KP_0 = 0x0052;
/** Modifier and Control Keys */
public static final int VC_SHIFT_L = 0x002A;
public static final int VC_SHIFT_R = 0x0036;
public static final int VC_CONTROL_L = 0x001D;
public static final int VC_CONTROL_R = 0x0E1D;
public static final int VC_ALT_L = 0x0038; // Option or Alt Key
public static final int VC_ALT_R = 0x0E38; // Option or Alt Key
public static final int VC_META_L = 0x0E5B; // Windows or Command Key
public static final int VC_META_R = 0x0E5C; // Windows or Command Key
public static final int VC_CONTEXT_MENU = 0x0E5D;
/** Media and Extra Keys */
public static final int VC_POWER = 0xE05E;
public static final int VC_SLEEP = 0xE05F;
public static final int VC_WAKE = 0xE063;
public static final int VC_MEDIA_PLAY = 0xE022;
public static final int VC_MEDIA_STOP = 0xE024;
public static final int VC_MEDIA_PREVIOUS = 0xE010;
public static final int VC_MEDIA_NEXT = 0xE019;
public static final int VC_MEDIA_SELECT = 0xE06D;
public static final int VC_MEDIA_EJECT = 0xE02C;
public static final int VC_VOLUME_MUTE = 0xE020;
public static final int VC_VOLUME_UP = 0xE030;
public static final int VC_VOLUME_DOWN = 0xE02E;
public static final int VC_APP_MAIL = 0xE06C;
public static final int VC_APP_CALCULATOR = 0xE021;
public static final int VC_APP_MUSIC = 0xE03C;
public static final int VC_APP_PICTURES = 0xE064;
public static final int VC_BROWSER_SEARCH = 0xE065;
public static final int VC_BROWSER_HOME = 0xE032;
public static final int VC_BROWSER_BACK = 0xE06A;
public static final int VC_BROWSER_FORWARD = 0xE069;
public static final int VC_BROWSER_STOP = 0xE068;
public static final int VC_BROWSER_REFRESH = 0xE067;
public static final int VC_BROWSER_FAVORITES = 0xE066;
/** Japanese Language Keys */
public static final int VC_KATAKANA = 0x0070;
public static final int VC_UNDERSCORE = 0x0073;
public static final int VC_FURIGANA = 0x0077;
public static final int VC_KANJI = 0x0079;
public static final int VC_HIRAGANA = 0x007B;
public static final int VC_YEN = 0x007D;
public static final int VC_KP_COMMA = 0x007E;
/** Sun keyboards */
public static final int VC_SUN_HELP = 0xFF75;
public static final int VC_SUN_STOP = 0xFF78;
public static final int VC_SUN_PROPS = 0xFF76;
public static final int VC_SUN_FRONT = 0xFF77;
public static final int VC_SUN_OPEN = 0xFF74;
public static final int VC_SUN_FIND = 0xFF7E;
public static final int VC_SUN_AGAIN = 0xFF79;
public static final int VC_SUN_UNDO = 0xFF7A;
public static final int VC_SUN_COPY = 0xFF7C;
public static final int VC_SUN_INSERT = 0xFF7D;
public static final int VC_SUN_CUT = 0xFF7B;
/** This value is used to indicate that the keyCode is unknown. */
public static final int VC_UNDEFINED = 0x0000;
/** This is used to indicate that the keyChar is undefined. */
public static final char CHAR_UNDEFINED = 0xFFFF;
/**
* Instantiates a new native key event.
*
* Note that passing in an invalid ID results in unspecified behavior.
* @param id an integer that identifies the native event type.
* @param when the timestamp for the native event.
* @param modifiers the modifier mask for the native event.
* NativeInputEvent
_MASK modifiers should be used as they are
* not compatible with AWT's InputEvent
_DOWN_MASK or the older
* _MASK modifiers.
* @param rawCode the hardware code associated with the native key in this
* event.
* @param keyCode the virtual key code generated by this event, or
* VC_UNDEFINED (for a key-typed event)
* @param keyChar the Unicode character generated by this event, or
* CHAR_UNDEFINED (for key-pressed and key-released events which do not map
* to a valid Unicode character).
* @param keyLocation the location ID of the key generating this event.
*
* @since 1.1
*/
public NativeKeyEvent(int id, long when, int modifiers, int rawCode, int keyCode, char keyChar, int keyLocation) {
super(GlobalScreen.class, id, when, modifiers);
this.rawCode = rawCode;
this.keyCode = keyCode;
this.keyChar = keyChar;
this.keyLocation = keyLocation;
if (id == NATIVE_KEY_TYPED && (keyChar == CHAR_UNDEFINED || keyCode != VC_UNDEFINED)) {
throw new IllegalArgumentException();
}
}
/**
* Instantiates a new native key event.
*
* Note that passing in an invalid ID results in unspecified behavior.
* @param id an integer that identifies the native event type.
* @param when the timestamp for the native event.
* @param modifiers the modifier mask for the native event.
* NativeInputEvent
_MASK modifiers should be used as they are
* not compatible with AWT's InputEvent
_DOWN_MASK or the older
* _MASK modifiers.
* @param rawCode the hardware code associated with the native key in this
* event.
* @param keyCode the virtual key code generated by this event, or
* VC_UNDEFINED (for a key-typed event)
* @param keyChar the Unicode character generated by this event, or
* CHAR_UNDEFINED (for key-pressed and key-released events which do not map
* to a valid Unicode character).
*
* @since 1.1
*/
public NativeKeyEvent(int id, long when, int modifiers, int rawCode, int keyCode, char keyChar) {
this(id, when, modifiers, rawCode, keyCode, keyChar, KEY_LOCATION_UNKNOWN);
}
/**
* Returns the native code associated with the native key in this event.
* This is an arbitrary number between 0 and 255 (inclusive) used by the
* operating system to represent a physical key on the keyboard. This
* code does not necessarily represent the native key's scan code or ASCII
* representation. To maintain platform independence, you should not rely
* on the consistency of this value from platform to platform.
*
* @return the native key code for this event.
*/
public int getRawCode() {
return this.rawCode;
}
/**
* Set the rawCode value in this event. For more information on what this
* value represents, please see {@link #getRawCode()}.
*
* @param rawCode the native key code for this event.
*/
public void setRawCode(int rawCode) {
this.rawCode = rawCode;
}
/**
* Returns the keyCode associated with this event. Note,
* this method will always return VC_UNDEFINED
for the
* NATIVE_KEY_TYPED
event types.
*
* @return the native virtual key code.
*/
public int getKeyCode() {
return this.keyCode;
}
/**
* Set the keyCode value in this event.
*
* @param keyCode the native virtual key code.
*/
public void setKeyCode(int keyCode) {
this.keyCode = keyCode;
}
/**
* Returns the native Unicode character associated with this event. Note,
* this method will always return CHAR_UNDEFINED
for
* NATIVE_KEY_PRESSED
and NATIVE_KEY_RELEASED
* event types.
*
* @return the Unicode character defined for this key event. If no valid
* Unicode character exists for this key event, CHAR_UNDEFINED
* is returned.
*/
public char getKeyChar() {
return this.keyChar;
}
/**
* Set the keyChar value in this event. For example, the
* NATIVE_KEY_TYPED
event for Shift + "a" returns the Unicode
* value 'A'.
*
* @param keyChar the keyboard character associated with this event.
*/
public void setKeyChar(char keyChar) {
this.keyChar = keyChar;
}
/**
* Returns the location of the virtual key for this event.
*
* @return the location of the virtual key that was pressed or released.
*/
public int getKeyLocation() {
return this.keyLocation;
}
/**
* Returns a String describing the keyCode, such as "HOME", "F1" or "A".
* These strings can be localized by changing the awt.properties file.
*
* @param keyCode the native virtual key code generated by this event
* @return a string containing a text description for a physical key,
* identified by its keyCode.
*/
public static String getKeyText(int keyCode) {
// Lookup text values.
switch (keyCode) {
case VC_ESCAPE:
return Toolkit.getProperty("AWT.escape", "Escape");
// Begin Function Keys
case VC_F1:
return Toolkit.getProperty("AWT.f1", "F1");
case VC_F2:
return Toolkit.getProperty("AWT.f2", "F2");
case VC_F3:
return Toolkit.getProperty("AWT.f3", "F3");
case VC_F4:
return Toolkit.getProperty("AWT.f4", "F4");
case VC_F5:
return Toolkit.getProperty("AWT.f5", "F5");
case VC_F6:
return Toolkit.getProperty("AWT.f6", "F6");
case VC_F7:
return Toolkit.getProperty("AWT.f7", "F7");
case VC_F8:
return Toolkit.getProperty("AWT.f8", "F8");
case VC_F9:
return Toolkit.getProperty("AWT.f9", "F9");
case VC_F10:
return Toolkit.getProperty("AWT.f10", "F10");
case VC_F11:
return Toolkit.getProperty("AWT.f11", "F11");
case VC_F12:
return Toolkit.getProperty("AWT.f12", "F12");
case VC_F13:
return Toolkit.getProperty("AWT.f13", "F13");
case VC_F14:
return Toolkit.getProperty("AWT.f14", "F14");
case VC_F15:
return Toolkit.getProperty("AWT.f15", "F15");
case VC_F16:
return Toolkit.getProperty("AWT.f16", "F16");
case VC_F17:
return Toolkit.getProperty("AWT.f17", "F17");
case VC_F18:
return Toolkit.getProperty("AWT.f18", "F18");
case VC_F19:
return Toolkit.getProperty("AWT.f19", "F19");
case VC_F20:
return Toolkit.getProperty("AWT.f20", "F20");
case VC_F21:
return Toolkit.getProperty("AWT.f21", "F21");
case VC_F22:
return Toolkit.getProperty("AWT.f22", "F22");
case VC_F23:
return Toolkit.getProperty("AWT.f23", "F23");
case VC_F24:
return Toolkit.getProperty("AWT.f24", "F24");
// End Function Keys
// Begin Alphanumeric Zone
case VC_BACKQUOTE:
return Toolkit.getProperty("AWT.backQuote", "Back Quote");
case VC_1:
return "1";
case VC_2:
return "2";
case VC_3:
return "3";
case VC_4:
return "4";
case VC_5:
return "5";
case VC_6:
return "6";
case VC_7:
return "7";
case VC_8:
return "8";
case VC_9:
return "9";
case VC_0:
return "0";
case VC_MINUS:
return Toolkit.getProperty("AWT.minus", "Minus");
case VC_EQUALS:
return Toolkit.getProperty("AWT.equals", "Equals");
case VC_BACKSPACE:
return Toolkit.getProperty("AWT.backSpace", "Backspace");
case VC_TAB:
return Toolkit.getProperty("AWT.tab", "Tab");
case VC_CAPS_LOCK:
return Toolkit.getProperty("AWT.capsLock", "Caps Lock");
case VC_A:
return "A";
case VC_B:
return "B";
case VC_C:
return "C";
case VC_D:
return "D";
case VC_E:
return "E";
case VC_F:
return "F";
case VC_G:
return "G";
case VC_H:
return "H";
case VC_I:
return "I";
case VC_J:
return "J";
case VC_K:
return "K";
case VC_L:
return "L";
case VC_M:
return "M";
case VC_N:
return "N";
case VC_O:
return "O";
case VC_P:
return "P";
case VC_Q:
return "Q";
case VC_R:
return "R";
case VC_S:
return "S";
case VC_T:
return "T";
case VC_U:
return "U";
case VC_V:
return "V";
case VC_W:
return "W";
case VC_X:
return "X";
case VC_Y:
return "Y";
case VC_Z:
return "Z";
case VC_OPEN_BRACKET:
return Toolkit.getProperty("AWT.openBracket", "Open Bracket");
case VC_CLOSE_BRACKET:
return Toolkit.getProperty("AWT.closeBracket", "Close Bracket");
case VC_BACK_SLASH:
return Toolkit.getProperty("AWT.backSlash", "Back Slash");
case VC_SEMICOLON:
return Toolkit.getProperty("AWT.semicolon", "Semicolon");
case VC_QUOTE:
return Toolkit.getProperty("AWT.quote", "Quote");
case VC_ENTER:
return Toolkit.getProperty("AWT.enter", "Enter");
case VC_COMMA:
return Toolkit.getProperty("AWT.comma", "Comma");
case VC_PERIOD:
return Toolkit.getProperty("AWT.period", "Period");
case VC_SLASH:
return Toolkit.getProperty("AWT.slash", "Slash");
case VC_SPACE:
return Toolkit.getProperty("AWT.space", "Space");
// End Alphanumeric Zone
case VC_PRINTSCREEN:
return Toolkit.getProperty("AWT.printScreen", "Print Screen");
case VC_SCROLL_LOCK:
return Toolkit.getProperty("AWT.scrollLock", "Scroll Lock");
case VC_PAUSE:
return Toolkit.getProperty("AWT.pause", "Pause");
// Begin Edit Key Zone
case VC_INSERT:
return Toolkit.getProperty("AWT.insert", "Insert");
case VC_DELETE:
return Toolkit.getProperty("AWT.delete", "NumPad Delete");
case VC_HOME:
return Toolkit.getProperty("AWT.home", "Home");
case VC_END:
return Toolkit.getProperty("AWT.end", "End");
case VC_PAGE_UP:
return Toolkit.getProperty("AWT.pgup", "Page Up");
case VC_PAGE_DOWN:
return Toolkit.getProperty("AWT.pgdn", "Page Down");
// End Edit Key Zone
// Begin Cursor Key Zone
case VC_UP:
return Toolkit.getProperty("AWT.up", "Up");
case VC_DOWN:
return Toolkit.getProperty("AWT.down", "Down");
case VC_LEFT:
return Toolkit.getProperty("AWT.left", "Left");
case VC_RIGHT:
return Toolkit.getProperty("AWT.right", "Right");
// End Cursor Key Zone
// Begin Numeric Zone
case VC_NUM_LOCK:
return Toolkit.getProperty("AWT.numpad_numLock", "Num Lock");
case VC_KP_DIVIDE:
return Toolkit.getProperty("AWT.numpad_divide", "NumPad Divide");
case VC_KP_MULTIPLY:
return Toolkit.getProperty("AWT.numpad_multiply", "NumPad Multiply");
case VC_KP_SUBTRACT:
return Toolkit.getProperty("AWT.numpad_subtract", "NumPad Subtract");
case VC_KP_EQUALS:
return Toolkit.getProperty("AWT.numpad_equals", "NumPad Equals");
case VC_KP_ADD:
return Toolkit.getProperty("AWT.numpad_add", "NumPad Add");
case VC_KP_ENTER:
return Toolkit.getProperty("AWT.numpad_enter", "NumPad Enter");
case VC_KP_SEPARATOR:
return Toolkit.getProperty("AWT.numpad_separator", "NumPad Separator");
case VC_KP_1:
return Toolkit.getProperty("AWT.numpad_1", "NumPad 1");
case VC_KP_2:
return Toolkit.getProperty("AWT.numpad_2", "NumPad 2");
case VC_KP_3:
return Toolkit.getProperty("AWT.numpad_3", "NumPad 3");
case VC_KP_4:
return Toolkit.getProperty("AWT.numpad_4", "NumPad 4");
case VC_KP_5:
return Toolkit.getProperty("AWT.numpad_5", "NumPad 5");
case VC_KP_6:
return Toolkit.getProperty("AWT.numpad_6", "NumPad 6");
case VC_KP_7:
return Toolkit.getProperty("AWT.numpad_7", "NumPad 7");
case VC_KP_8:
return Toolkit.getProperty("AWT.numpad_8", "NumPad 8");
case VC_KP_9:
return Toolkit.getProperty("AWT.numpad_9", "NumPad 9");
case VC_KP_0:
return Toolkit.getProperty("AWT.numpad_0", "NumPad 0");
// End Numeric Zone
// Begin Modifier and Control Keys
case VC_SHIFT_L:
return Toolkit.getProperty("AWT.shift_l", "Left Shift");
case VC_SHIFT_R:
return Toolkit.getProperty("AWT.shift_r", "Right Shift");
case VC_CONTROL_L:
return Toolkit.getProperty("AWT.control_l", "Left Control");
case VC_CONTROL_R:
return Toolkit.getProperty("AWT.control_r", "Right Control");
case VC_ALT_L:
return Toolkit.getProperty("AWT.alt_l", "Left Alt");
case VC_ALT_R:
return Toolkit.getProperty("AWT.alt_r", "Right Alt");
case VC_META_L:
return Toolkit.getProperty("AWT.meta_l", "Left Meta");
case VC_META_R:
return Toolkit.getProperty("AWT.meta_r", "Right Meta");
case VC_CONTEXT_MENU:
return Toolkit.getProperty("AWT.context", "Context Menu");
// End Modifier and Control Keys
// Begin Media Control Keys
case VC_POWER:
return Toolkit.getProperty("AWT.power", "Power");
case VC_SLEEP:
return Toolkit.getProperty("AWT.sleep", "Sleep");
case VC_WAKE:
return Toolkit.getProperty("AWT.wake", "Wake");
case VC_MEDIA_PLAY:
return Toolkit.getProperty("AWT.play", "Play");
case VC_MEDIA_STOP:
return Toolkit.getProperty("AWT.stop", "Stop");
case VC_MEDIA_PREVIOUS:
return Toolkit.getProperty("AWT.previous", "Previous");
case VC_MEDIA_NEXT:
return Toolkit.getProperty("AWT.next", "Next");
case VC_MEDIA_SELECT:
return Toolkit.getProperty("AWT.select", "Select");
case VC_MEDIA_EJECT:
return Toolkit.getProperty("AWT.eject", "Eject");
case VC_VOLUME_MUTE:
return Toolkit.getProperty("AWT.mute", "Mute");
case VC_VOLUME_UP:
return Toolkit.getProperty("AWT.volup", "Volume Up");
case VC_VOLUME_DOWN:
return Toolkit.getProperty("AWT.voldn", "Volume Down");
case VC_APP_MAIL:
return Toolkit.getProperty("AWT.app_mail", "App Mail");
case VC_APP_CALCULATOR:
return Toolkit.getProperty("AWT.app_calculator", "App Calculator");
case VC_APP_MUSIC:
return Toolkit.getProperty("AWT.app_music", "App Music");
case VC_APP_PICTURES:
return Toolkit.getProperty("AWT.app_pictures", "App Pictures");
case VC_BROWSER_SEARCH:
return Toolkit.getProperty("AWT.search", "Browser Search");
case VC_BROWSER_HOME:
return Toolkit.getProperty("AWT.homepage", "Browser Home");
case VC_BROWSER_BACK:
return Toolkit.getProperty("AWT.back", "Browser Back");
case VC_BROWSER_FORWARD:
return Toolkit.getProperty("AWT.forward", "Browser Forward");
case VC_BROWSER_STOP:
return Toolkit.getProperty("AWT.stop", "Browser Stop");
case VC_BROWSER_REFRESH:
return Toolkit.getProperty("AWT.refresh", "Browser Refresh");
case VC_BROWSER_FAVORITES:
return Toolkit.getProperty("AWT.favorites", "Browser Favorites");
// End Media Control Keys
// Begin Japanese Language Keys
case VC_KATAKANA:
return Toolkit.getProperty("AWT.katakana", "Katakana");
case VC_UNDERSCORE:
return Toolkit.getProperty("AWT.underscore", "Underscore");
case VC_FURIGANA:
return Toolkit.getProperty("AWT.furigana", "Furigana");
case VC_KANJI:
return Toolkit.getProperty("AWT.kanji", "Kanji");
case VC_HIRAGANA:
return Toolkit.getProperty("AWT.hiragana", "Hiragana");
case VC_YEN:
return Toolkit.getProperty("AWT.yen", Character.toString((char) 0x00A5));
case VC_KP_COMMA:
return Toolkit.getProperty("AWT.numpad_comma", "NumPad Comma");
// End Japanese Language Keys
// Begin Sun keyboards
case VC_SUN_HELP:
return Toolkit.getProperty("AWT.sun_help", "Sun Help");
case VC_SUN_STOP:
return Toolkit.getProperty("AWT.sun_stop", "Sun Stop");
case VC_SUN_PROPS:
return Toolkit.getProperty("AWT.sun_props", "Sun Props");
case VC_SUN_FRONT:
return Toolkit.getProperty("AWT.sun_front", "Sun Front");
case VC_SUN_OPEN:
return Toolkit.getProperty("AWT.sun_open", "Sun Open");
case VC_SUN_FIND:
return Toolkit.getProperty("AWT.sun_find", "Sun Find");
case VC_SUN_AGAIN:
return Toolkit.getProperty("AWT.sun_again", "Sun Again");
case VC_SUN_COPY:
return Toolkit.getProperty("AWT.sun_copy", "Sun Copy");
case VC_SUN_INSERT:
return Toolkit.getProperty("AWT.sun_insert", "Sun Insert");
case VC_SUN_CUT:
return Toolkit.getProperty("AWT.sun_cut", "Sun Cut");
// End Sun keyboards
case VC_UNDEFINED:
return Toolkit.getProperty("AWT.undefined", "Undefined");
}
return Toolkit.getProperty("AWT.unknown", "Unknown") +
" keyCode: 0x" + Integer.toString(keyCode, 16);
}
/**
* Returns whether the key in this event is an "action" key. Typically, an
* action key does not fire a Unicode character and is not a modifier key.
*
* @return true
if the key is an "action" key,
* false
otherwise.
*
* @since 1.1
*/
public boolean isActionKey() {
switch (keyCode) {
// Function Keys
case VC_F1:
case VC_F2:
case VC_F3:
case VC_F4:
case VC_F5:
case VC_F6:
case VC_F7:
case VC_F8:
case VC_F9:
case VC_F10:
case VC_F11:
case VC_F12:
case VC_F13:
case VC_F14:
case VC_F15:
case VC_F16:
case VC_F17:
case VC_F18:
case VC_F19:
case VC_F20:
case VC_F21:
case VC_F22:
case VC_F23:
case VC_F24:
// Alphanumeric Zone
case VC_CAPS_LOCK:
case VC_PRINTSCREEN:
case VC_SCROLL_LOCK:
// Edit Key Zone
case VC_INSERT:
case VC_HOME:
case VC_END:
case VC_PAGE_UP:
case VC_PAGE_DOWN:
// Cursor Key Zone
case VC_UP:
case VC_DOWN:
case VC_LEFT:
case VC_RIGHT:
// Numeric Zone
case VC_NUM_LOCK:
// Modifier and Control Keys
case VC_SHIFT_L:
case VC_SHIFT_R:
case VC_CONTROL_L:
case VC_CONTROL_R:
case VC_ALT_L:
case VC_ALT_R:
case VC_META_L:
case VC_META_R:
case VC_CONTEXT_MENU:
// Media Control Keys
case VC_POWER:
case VC_SLEEP:
case VC_WAKE:
case VC_MEDIA_PLAY:
case VC_MEDIA_STOP:
case VC_MEDIA_PREVIOUS:
case VC_MEDIA_NEXT:
case VC_MEDIA_SELECT:
case VC_MEDIA_EJECT:
case VC_VOLUME_MUTE:
case VC_VOLUME_UP:
case VC_VOLUME_DOWN:
case VC_APP_MAIL:
case VC_APP_CALCULATOR:
case VC_APP_MUSIC:
case VC_APP_PICTURES:
case VC_BROWSER_SEARCH:
case VC_BROWSER_HOME:
case VC_BROWSER_BACK:
case VC_BROWSER_FORWARD:
case VC_BROWSER_STOP:
case VC_BROWSER_REFRESH:
case VC_BROWSER_FAVORITES:
// Japanese Language Keys
case VC_KATAKANA:
case VC_FURIGANA:
case VC_KANJI:
case VC_HIRAGANA:
// Sun keyboards
case VC_SUN_HELP:
case VC_SUN_STOP:
case VC_SUN_PROPS:
case VC_SUN_FRONT:
case VC_SUN_OPEN:
case VC_SUN_FIND:
case VC_SUN_AGAIN:
case VC_SUN_UNDO:
case VC_SUN_COPY:
case VC_SUN_INSERT:
case VC_SUN_CUT:
return true;
}
return false;
}
/**
* Returns a parameter string identifying this event. This method is useful
* for event logging and debugging.
*
* @return a string identifying the event and its attributes.
*/
@Override
public String paramString() {
StringBuilder param = new StringBuilder(255);
switch(getID()) {
case NATIVE_KEY_PRESSED:
param.append("NATIVE_KEY_PRESSED");
break;
case NATIVE_KEY_RELEASED:
param.append("NATIVE_KEY_RELEASED");
break;
case NATIVE_KEY_TYPED:
param.append("NATIVE_KEY_TYPED");
break;
default:
param.append("unknown type");
break;
}
param.append(',');
param.append("keyCode=");
param.append(keyCode);
param.append(',');
param.append("keyText=");
param.append(getKeyText(keyCode));
param.append(',');
param.append("keyChar=");
switch (keyChar) {
case VC_BACKSPACE:
case VC_DELETE:
case VC_ESCAPE:
case VC_ENTER:
case VC_TAB:
param.append(getKeyText(keyChar));
break;
case CHAR_UNDEFINED:
param.append(getKeyText(VC_UNDEFINED));
break;
default:
param.append('\'');
param.append(keyChar);
param.append('\'');
break;
}
param.append(',');
if (getModifiers() != 0) {
param.append("modifiers=");
param.append(getModifiersText(getModifiers()));
param.append(',');
}
param.append("keyLocation=");
switch (keyLocation) {
case KEY_LOCATION_UNKNOWN:
param.append("KEY_LOCATION_UNKNOWN");
break;
case KEY_LOCATION_STANDARD:
param.append("KEY_LOCATION_STANDARD");
break;
case KEY_LOCATION_LEFT:
param.append("KEY_LOCATION_LEFT");
break;
case KEY_LOCATION_RIGHT:
param.append("KEY_LOCATION_RIGHT");
break;
case KEY_LOCATION_NUMPAD:
param.append("KEY_LOCATION_NUMPAD");
break;
default:
param.append("KEY_LOCATION_UNKNOWN");
break;
}
param.append(',');
param.append("rawCode=");
param.append(rawCode);
return param.toString();
}
}