java.awt.event

Class KeyEvent

  • All Implemented Interfaces:
    Serializable
    Direct Known Subclasses:
    MenuKeyEvent

    public class KeyEvent
    extends InputEvent
    An event which indicates that a keystroke occurred in a component.

    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_PRESSED
        KEY_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.
    • As specified in Focus Specification key events are dispatched to the focus owner by default.

    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.

    Since:
    1.1
    See Also:
    KeyAdapter, KeyListener, Tutorial: Writing a Key Listener, Serialized Form
    • Constructor Detail
      • KeyEvent
        public KeyEvent(Component source,
                int id,
                long when,
                int modifiers,
                int keyCode,
                char keyChar,
                int keyLocation)
        Constructs a KeyEvent object.

        This method throws an IllegalArgumentException if source is null.

        Parameters:
        source - The Component that originated the event
        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)
        keyLocation - Identifies the key location. The only legal values are KEY_LOCATION_UNKNOWN, KEY_LOCATION_STANDARD, KEY_LOCATION_LEFT, KEY_LOCATION_RIGHT, and KEY_LOCATION_NUMPAD.
        Throws:
        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.
        IllegalArgumentException - if source is null
        Since:
        1.4
        See Also:
        EventObject.getSource(), AWTEvent.getID(), InputEvent.getWhen(), InputEvent.getModifiers(), getKeyCode(), getKeyChar(), getKeyLocation()
      • KeyEvent
        public KeyEvent(Component source,
                int id,
                long when,
                int modifiers,
                int keyCode,
                char keyChar)
        Constructs a KeyEvent object.

        This method throws an IllegalArgumentException if source is null.

        Parameters:
        source - The Component that originated the event
        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
        IllegalArgumentException - if source is null
        See Also:
        EventObject.getSource(), AWTEvent.getID(), InputEvent.getWhen(), InputEvent.getModifiers(), getKeyCode(), getKeyChar()
      • KeyEvent
        @Deprecated
        public KeyEvent(Component source,
                           int id,
                           long when,
                           int modifiers,
                           int keyCode)
        Deprecated. as of JDK1.1
    • Method Detail
      • getKeyCode
        public int getKeyCode()
        Returns the integer keyCode associated with the key in this event.
        Returns:
        the integer code for an actual key on the keyboard. (For KEY_TYPED events, the keyCode is VK_UNDEFINED.)
      • setKeyCode
        public void setKeyCode(int keyCode)
        Set the keyCode value to indicate a physical key.
        Parameters:
        keyCode - an integer corresponding to an actual key on the keyboard.
      • getKeyChar
        public char getKeyChar()
        Returns the character associated with the key in this event. For example, the KEY_TYPED event for shift + "a" returns the value for "A".

        KEY_PRESSED and KEY_RELEASED events are not intended for reporting of character input. Therefore, the values returned by this method are guaranteed to be meaningful only for KEY_TYPED events.

        Returns:
        the Unicode character defined for this key event. If no valid Unicode character exists for this key event, CHAR_UNDEFINED is returned.
      • setKeyChar
        public void setKeyChar(char keyChar)
        Set the keyChar value to indicate a logical character.
        Parameters:
        keyChar - a char corresponding to to the combination of keystrokes that make up this event.
      • setModifiers
        @Deprecated
        public void setModifiers(int modifiers)
        Deprecated. as of JDK1.1.4
        Set the modifiers to indicate additional keys that were held down (e.g. shift, ctrl, alt, meta) defined as part of InputEvent.

        NOTE: use of this method is not recommended, because many AWT implementations do not recognize modifier changes. This is especially true for KEY_TYPED events where the shift modifier is changed.

        Parameters:
        modifiers - an integer combination of the modifier constants.
        See Also:
        InputEvent
      • 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.
        Since:
        1.4
      • getKeyText
        public static String getKeyText(int keyCode)
        Returns a String describing the keyCode, such as "HOME", "F1" or "A". These strings can be localized by changing the awt.properties file.
        Returns:
        a string containing a text description for a physical key, identified by its keyCode
      • getKeyModifiersText
        public static String getKeyModifiersText(int modifiers)
        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
        See Also:
        InputEvent.getModifiersExText(int)
      • isActionKey
        public boolean isActionKey()
        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.
        Returns:
        true if the key is an "action" key, false otherwise
      • paramString
        public String paramString()
        Returns a parameter string identifying this event. This method is useful for event logging and for debugging.
        Overrides:
        paramString in class ComponentEvent
        Returns:
        a string identifying the event and its attributes
      • 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.
        Since:
        1.7

Document created the 11/06/2005, last modified the 04/03/2020
Source of the printed document:https://www.gaudry.be/en/java-api-rf-java/awt/event/keyevent.html

The infobrol is a personal site whose content is my sole responsibility. The text is available under CreativeCommons license (BY-NC-SA). More info on the terms of use and the author.

References

  1. View the html document Language of the document:fr Manuel PHP : https://docs.oracle.com

These references and links indicate documents consulted during the writing of this page, or which may provide additional information, but the authors of these sources can not be held responsible for the content of this page.
The author This site is solely responsible for the way in which the various concepts, and the freedoms that are taken with the reference works, are presented here. Remember that you must cross multiple source information to reduce the risk of errors.

Contents Haut