This low-level event is generated by a component object (such as a text
field) when a key is pressed, released, or typed.
The event is passed to every KeyListener
or KeyAdapter object which registered to receive such
events using the component's addKeyListener method.
(KeyAdapter objects implement the
KeyListener interface.) Each such listener object
gets this KeyEvent when the event occurs.

"Key typed" events are higher-level and generally do not depend on
the platform or keyboard layout. They are generated when a Unicode character
is entered, and are the preferred way to find out about character input.
In the simplest case, a key typed event is produced by a single key press
(e.g., 'a'). Often, however, characters are produced by series of key
presses (e.g., 'shift' + 'a'), and the mapping from key pressed events to
key typed events may be many-to-one or many-to-many. Key releases are not
usually necessary to generate a key typed event, but there are some cases
where the key typed event is not generated until a key is released (e.g.,
entering ASCII sequences via the Alt-Numpad method in Windows).
No key typed events are generated for keys that don't generate Unicode
characters (e.g., action keys, modifier keys, etc.).

The getKeyChar method always returns a valid Unicode character or
CHAR_UNDEFINED. Character input is reported by KEY_TYPED events:
KEY_PRESSED and KEY_RELEASED events are not necessarily associated
with character input. Therefore, the result of the getKeyChar method
is guaranteed to be meaningful only for KEY_TYPED events.

For key pressed and key released events, the getKeyCode method returns
the event's keyCode. For key typed events, the getKeyCode method
always returns VK_UNDEFINED. The getExtendedKeyCode method
may also be used with many international keyboard layouts.

"Key pressed" and "key released" events are lower-level and depend
on the platform and keyboard layout. They are generated whenever a key is
pressed or released, and are the only way to find out about keys that don't
generate character input (e.g., action keys, modifier keys, etc.). The key
being pressed or released is indicated by the getKeyCode and getExtendedKeyCode
methods, which return a virtual key code.

Virtual key codes are used to report which keyboard key has
been pressed, rather than a character generated by the combination
of one or more keystrokes (such as "A", which comes from shift and "a").

For example, pressing the Shift key will cause a KEY_PRESSED event
with a VK_SHIFT keyCode, while pressing the 'a' key will result in
a VK_A keyCode. After the 'a' key is released, a KEY_RELEASED event
will be fired with VK_A. Separately, a KEY_TYPED event with a keyChar
value of 'A' is generated.

Pressing and releasing a key on the keyboard results in the generating
the following key events (in order):

KEY_PRESSEDKEY_TYPED (is only generated if a valid Unicode character could be generated.)
KEY_RELEASED

But in some cases (e.g. auto-repeat or input method is activated) the order
could be different (and platform dependent).

Notes:

Key combinations which do not result in Unicode characters, such as action
keys like F1 and the HELP key, do not generate KEY_TYPED events.

Not all keyboards or systems are capable of generating all
virtual key codes. No attempt is made in Java to generate these keys
artificially.

Virtual key codes do not identify a physical key: they depend on the
platform and keyboard layout. For example, the key that generates VK_Q
when using a U.S. keyboard layout will generate VK_A when using a French
keyboard layout.

The key that generates VK_Q when using a U.S. keyboard layout also
generates a unique code for Russian or Hebrew layout. There is no a
VK_ constant for these and many other codes in various layouts. These codes
may be obtained by using getExtendedKeyCode and are used whenever
a VK_ constant is used.

Not all characters have a keycode associated with them. For example,
there is no keycode for the question mark because there is no keyboard
for which it appears on the primary layer.

In order to support the platform-independent handling of action keys,
the Java platform uses a few additional virtual key constants for functions
that would otherwise have to be recognized by interpreting virtual key codes
and modifiers. For example, for Japanese Windows keyboards, VK_ALL_CANDIDATES
is returned instead of VK_CONVERT with the ALT modifier.

WARNING: Aside from those keys that are defined by the Java language
(VK_ENTER, VK_BACK_SPACE, and VK_TAB), do not rely on the values of the VK_
constants. Sun reserves the right to change these values as needed
to accomodate a wider range of keyboards in the future.

An unspecified behavior will be caused if the id parameter
of any particular KeyEvent instance is not
in the range from KEY_FIRST to KEY_LAST.

A constant indicating that the key pressed or released
is not distinguished as the left or right version of a key,
and did not originate on the numeric keypad (or did not
originate with a virtual key corresponding to the numeric
keypad).

KEY_LAST

KEY_TYPED

public static final int KEY_TYPED

The "key typed" event. This event is generated when a character is
entered. In the simplest case, it is produced by a single key press.
Often, however, characters are produced by series of key presses, and
the mapping from key pressed events to key typed events may be
many-to-one or many-to-many.

KEY_LOCATION_STANDARD

public static final int KEY_LOCATION_STANDARD

A constant indicating that the key pressed or released
is not distinguished as the left or right version of a key,
and did not originate on the numeric keypad (or did not
originate with a virtual key corresponding to the numeric
keypad).

id - An integer indicating the type of event.
For information on allowable values, see
the class description for KeyEvent

when - A long integer that specifies the time the event
occurred.
Passing negative or zero value
is not recommended

modifiers - The modifier keys down during event (shift, ctrl,
alt, meta).
Passing negative value
is not recommended.
Zero value means that no modifiers were passed.
Use either an extended _DOWN_MASK or old _MASK modifiers,
however do not mix models in the one event.
The extended modifiers are preferred for using

keyCode - The integer code for an actual key, or VK_UNDEFINED
(for a key-typed event)

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)

IllegalArgumentException - if id is KEY_TYPED and
keyChar is CHAR_UNDEFINED;
or if id is KEY_TYPED and
keyCode is not VK_UNDEFINED;
or if id is KEY_TYPED and
keyLocation is not KEY_LOCATION_UNKNOWN;
or if keyLocation is not one of the legal
values enumerated above.

id - An integer indicating the type of event.
For information on allowable values, see
the class description for KeyEvent

when - A long integer that specifies the time the event
occurred.
Passing negative or zero value
is not recommended

modifiers - The modifier keys down during event (shift, ctrl,
alt, meta).
Passing negative value
is not recommended.
Zero value means that no modifiers were passed.
Use either an extended _DOWN_MASK or old _MASK modifiers,
however do not mix models in the one event.
The extended modifiers are preferred for using

keyCode - The integer code for an actual key, or VK_UNDEFINED
(for a key-typed event)

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)

Throws:

IllegalArgumentException - if id is
KEY_TYPED and keyChar is
CHAR_UNDEFINED; or if id is
KEY_TYPED and keyCode is not
VK_UNDEFINED

getKeyLocation

public int getKeyLocation()

Returns the location of the key that originated this key event.
Some keys occur more than once on a keyboard, e.g. the left and
right shift keys. Additionally, some keys occur on the numeric
keypad. This provides a way of distinguishing such keys.

Returns:

the location of the key that was pressed or released.
Always returns KEY_LOCATION_UNKNOWN for
KEY_TYPED events.

getKeyModifiersText

Returns a String describing the modifier key(s),
such as "Shift", or "Ctrl+Shift". These strings can be
localized by changing the awt.properties file.

Note that InputEvent.ALT_MASK and
InputEvent.BUTTON2_MASK have the same value,
so the string "Alt" is returned for both modifiers. Likewise,
InputEvent.META_MASK and
InputEvent.BUTTON3_MASK have the same value,
so the string "Meta" is returned for both modifiers.

Returns:

string a text description of the combination of modifier
keys that were held down during the event

getExtendedKeyCode

public int getExtendedKeyCode()

Returns an extended key code for the event.
The extended key code is a unique id assigned to a key on the keyboard
just like keyCode. However, unlike keyCode, this value depends on the
current keyboard layout. For instance, pressing the left topmost letter key
in a common English layout produces the same value as keyCode, VK_Q.
Pressing the same key in a regular Russian layout gives another code, unique for the
letter "Cyrillic I short".

Since:

1.7

getExtendedKeyCodeForChar

public static int getExtendedKeyCodeForChar(int c)

Returns an extended key code for a unicode character.

Returns:

for a unicode character with a corresponding VK_ constant -- this
VK_ constant; for a character appearing on the primary
level of a known keyboard layout -- a unique integer.
If a character does not appear on the primary level of a known keyboard,
VK_UNDEFINED is returned.