java.awt.event

接口
java.lang.Object
  继承者 java.util.EventObject
      继承者 java.awt.AWTEvent
          继承者 java.awt.event.ComponentEvent
              继承者 java.awt.event.InputEvent
                  继承者 java.awt.event.KeyEvent
所有已实现的接口:
Serializable
直接已知子类:
MenuKeyEvent

public class KeyEvent
     
extends InputEvent

表示组件中发生键击的事件。

当按下、释放或键入某个键时,组件对象(如文本字段)将生成此低级别事件。该事件被传递给每一个 KeyListenerKeyAdapter 对象,这些对象使用组件的 addKeyListener 方法注册,以接收此类事件。(KeyAdapter 对象实现 KeyListener 接口。)发生事件时,所有此类侦听器对象都将获得此 KeyEvent

“键入键”事件 是高级别事件,通常不依赖于平台或键盘布局。输入 Unicode 字符时生成此类事件,它们被认为是发现字符输入的最佳方式。最简单的情况是,按下单个键(如 "a")将产生键入键事件。但是,字符经常是通过一系列按键(如‘shift’+‘a’)产生的,按下键事件和键入键事件的映射关系可能是多对一或多对多的。键释放通常不需要生成键入键事件,但在某些情况下,只有释放了某个键后才能生成键入键事件(如在 Windows 中通过 Alt-Numpad 方法来输入 ASCII 序列)。对于不生成 Unicode 字符的键是不会生成键入键事件的(如动作键、修改键等等)。

getKeyChar 方法总是返回有效的 Unicode 字符或 CHAR_UNDEFINED。KEY_TYPED 事件报告字符输入:KEY_PRESSED 和 KEY_RELEASED 事件不必与字符输入关联。因此,可以保证 getKeyChar 方法的结果只对 KEY_TYPED 事件有意义。

对于按下键和释放键事件,getKeyCode 方法返回该事件的 keyCode。对于键入键事件,getKeyCode 方法总是返回 VK_UNDEFINED。

“按下键”和“释放键”事件 是低级别事件,依赖于平台和键盘布局。只要按下或释放键就生成这些事件,它们是发现不生成字符输入的键(如动作键、修改键等等)的惟一方式。通过 getKeyCode 方法可指出按下或释放的键,该方法返回一个虚拟键码。

虚拟键码 用于报告按下了键盘上的哪个键,而不是一次或多次键击组合生成的字符(如 "A" 是由 shift + "a" 生成的)。

例如,按下 Shift 键会生成 keyCode 为 VK_SHIFT 的 KEY_PRESSED 事件,而按下 'a' 键将生成 keyCode 为 VK_A 的 KEY_PRESSED 事件。释放 'a' 键后,会激发 keyCode 为 VK_A 的 KEY_RELEASED 事件。另外,还会生成一个 keyChar 值为 'A' 的 KEY_TYPED 事件。

按下和释放键盘上的键会导致(依次)生成以下键事件:

    KEY_PRESSED
    KEY_TYPED(只在可生成有效 Unicode 字符时产生。)
    KEY_RELEASED
 
但在某些情况下(例如,在激活自动重复或输入方法时),该顺序可能会有所不同(并且与平台有关)。

注:

  • 不产生 Unicode 字符的键组合(如 F1 和 HELP 键等动作键)不会生成 KEY_TYPED 事件。
  • 并非所有键盘和系统都能够生成所有的虚拟键码。在 Java 中不会尝试人为地生成这些键。
  • 虚拟键码不标识物理键:它们取决于平台和键盘布局。例如,使用美国键盘布局时生成 VK_Q 的键在使用法国键盘布局时将生成 VK_A。
  • 并非所有的字符都有与之关联的 keycode。例如,没有用于问号的 keycode,因为没有在主层上显示问号的键盘。
  • 为了支持平台无关的动作键处理,Java 平台为某些功能使用少量附加虚拟键常量,否则必须通过解释虚拟键码和修饰符来识别这些功能。例如,对于日文 Windows 键盘,返回 VK_ALL_CANDIDATES 而不是 VK_CONVERT 加 ALT 修饰符。
  • 正如 Focus Specification 中指定的那样,默认情况下键事件被指派给焦点拥有者。

警告:除了 Java 语言定义的这些键之外(VK_ENTER、VK_BACK_SPACE 和 VK_TAB),不要依赖 VK_ 常量值。Sun 保留将来根据需要更改这些值的权利,以适应更大范围的键盘。

从以下版本开始:
1.1
另请参见:
KeyAdapter, KeyListener, Tutorial: Writing a Key Listener, 序列化表格

字段摘要
static char CHAR_UNDEFINED
          KEY_PRESSED 和 KEY_RELEASED 事件没有映射到一个有效的 Unicode 字符时使用此值作为 keyChar 值。
static int KEY_FIRST
          用于键事件的 id 范围的起始编号。
static int KEY_LAST
          用于键事件的 id 范围的结束编号。
static int KEY_LOCATION_LEFT
          该常量指示按下或释放的键位于左侧(此键的位置有多种可能性)。
static int KEY_LOCATION_NUMPAD
          该常量指示按键事件发自于数字键盘或对应于数字键盘的虚拟键。
static int KEY_LOCATION_RIGHT
          该常量指示按下或释放的键位于右侧(此键的位置有多种可能性)。
static int KEY_LOCATION_STANDARD
          该常量指示按下或释放的键不区分左右,并且不是发自数字键盘(或者不是发自对应于数字键盘的虚拟键)。
static int KEY_LOCATION_UNKNOWN
          指示 keyLocation 为不确定或不相关的常量。
static int KEY_PRESSED
          “按下键”事件。
static int KEY_RELEASED
          “释放键”事件。
static int KEY_TYPED
          “键入键”事件。
static int VK_0
          VK_0 到 VK_9 与 ASCII 的‘0’到‘9’(0x30 - 0x39) 相同
static int VK_1
           
static int VK_2
           
static int VK_3
           
static int VK_4
           
static int VK_5
           
static int VK_6
           
static int VK_7
           
static int VK_8
           
static int VK_9
           
static int VK_A
          VK_A 到 VK_Z 与 ASCII 的‘A’到‘Z’(0x41 - 0x5A) 相同
static int VK_ACCEPT
          用于 Accept 或 Commit 功能键的常量。
static int VK_ADD
           
static int VK_AGAIN
           
static int VK_ALL_CANDIDATES
          用于 All Candidates 功能键的常量。
static int VK_ALPHANUMERIC
          用于 Alphanumeric 功能键的常量。
static int VK_ALT
           
static int VK_ALT_GRAPH
          用于 AltGraph 功能键的常量。
static int VK_AMPERSAND
           
static int VK_ASTERISK
           
static int VK_AT
          用于 "@" 键的常量。
static int VK_B
           
static int VK_BACK_QUOTE
           
static int VK_BACK_SLASH
          用于反斜杠键 "\" 的常量。
static int VK_BACK_SPACE
           
static int VK_BEGIN
          用于 Begin 键的常量。
static int VK_BRACELEFT
           
static int VK_BRACERIGHT
           
static int VK_C
           
static int VK_CANCEL
           
static int VK_CAPS_LOCK
           
static int VK_CIRCUMFLEX
          用于 "^" 键的常量。
static int VK_CLEAR
           
static int VK_CLOSE_BRACKET
          用于右方括号键 "]" 的常量。
static int VK_CODE_INPUT
          用于 Code Input 功能键的常量。
static int VK_COLON
          用于 ":" 键的常量。
static int VK_COMMA
          用于逗号键 "," 的常量。
static int VK_COMPOSE
          用于 Compose 功能键的常量。
static int VK_CONTEXT_MENU
          用于 Microsoft Windows 上下文菜单键的常量。
static int VK_CONTROL
           
static int VK_CONVERT
          用于 Convert 功能键的常量。
static int VK_COPY
           
static int VK_CUT
           
static int VK_D
           
static int VK_DEAD_ABOVEDOT
           
static int VK_DEAD_ABOVERING
           
static int VK_DEAD_ACUTE
           
static int VK_DEAD_BREVE
           
static int VK_DEAD_CARON
           
static int VK_DEAD_CEDILLA
           
static int VK_DEAD_CIRCUMFLEX
           
static int VK_DEAD_DIAERESIS
           
static int VK_DEAD_DOUBLEACUTE
           
static int VK_DEAD_GRAVE
           
static int VK_DEAD_IOTA
           
static int VK_DEAD_MACRON
           
static int VK_DEAD_OGONEK
           
static int VK_DEAD_SEMIVOICED_SOUND
           
static int VK_DEAD_TILDE
           
static int VK_DEAD_VOICED_SOUND
           
static int VK_DECIMAL
           
static int VK_DELETE
           
static int VK_DIVIDE
           
static int VK_DOLLAR
          用于 "$" 键的常量。
static int VK_DOWN
          用于非数字键盘向下方向键的常量。
static int VK_E
           
static int VK_END
           
static int VK_ENTER
           
static int VK_EQUALS
          用于等号键 "=" 的常量。
static int VK_ESCAPE
           
static int VK_EURO_SIGN
          用于欧洲货币符号键的常量。
static int VK_EXCLAMATION_MARK
          用于 "!" 键的常量。
static int VK_F
           
static int VK_F1
          用于 F1 功能键的常量。
static int VK_F10
          用于 F10 功能键的常量。
static int VK_F11
          用于 F11 功能键的常量。
static int VK_F12
          用于 F12 功能键的常量。
static int VK_F13
          用于 F13 功能键的常量。
static int VK_F14
          用于 F14 功能键的常量。
static int VK_F15
          用于 F15 功能键的常量。
static int VK_F16
          用于 F16 功能键的常量。
static int VK_F17
          用于 F17 功能键的常量。
static int VK_F18
          用于 F18 功能键的常量。
static int VK_F19
          用于 F19 功能键的常量。
static int VK_F2
          用于 F2 功能键的常量。
static int VK_F20
          用于 F20 功能键的常量。
static int VK_F21
          用于 F21 功能键的常量。
static int VK_F22
          用于 F22 功能键的常量。
static int VK_F23
          用于 F23 功能键的常量。
static int VK_F24
          用于 F24 功能键的常量。
static int VK_F3
          用于 F3 功能键的常量。
static int VK_F4
          用于 F4 功能键的常量。
static int VK_F5
          用于 F5 功能键的常量。
static int VK_F6
          用于 F6 功能键的常量。
static int VK_F7
          用于 F7 功能键的常量。
static int VK_F8
          用于 F8 功能键的常量。
static int VK_F9
          用于 F9 功能键的常量。
static int VK_FINAL
           
static int VK_FIND
           
static int VK_FULL_WIDTH
          用于 Full-Width Characters 功能键的常量。
static int VK_G
           
static int VK_GREATER
           
static int VK_H
           
static int VK_HALF_WIDTH
          用于 Half-Width Characters 功能键的常量。
static int VK_HELP
           
static int VK_HIRAGANA
          用于 Hiragana 功能键的常量。
static int VK_HOME
           
static int VK_I
           
static int VK_INPUT_METHOD_ON_OFF
          用于输入法开/关键的常量。
static int VK_INSERT
           
static int VK_INVERTED_EXCLAMATION_MARK
          用于反向感叹号键的常量。
static int VK_J
           
static int VK_JAPANESE_HIRAGANA
          用于 Japanese-Hiragana 功能键的常量。
static int VK_JAPANESE_KATAKANA
          用于 Japanese-Katakana 功能键的常量。
static int VK_JAPANESE_ROMAN
          用于 Japanese-Roman 功能键的常量。
static int VK_K
           
static int VK_KANA
           
static int VK_KANA_LOCK
          用于锁定 Kana 功能键的常量。
static int VK_KANJI
           
static int VK_KATAKANA
          用于 Katakana 功能键的常量。
static int VK_KP_DOWN
          用于数字键盘向下方向键的常量。
static int VK_KP_LEFT
          用于数字键盘向左方向键的常量。
static int VK_KP_RIGHT
          用于数字键盘向右方向键的常量。
static int VK_KP_UP
          用于数字键盘向上方向键的常量。
static int VK_L
           
static int VK_LEFT
          用于非数字键盘向左方向键的常量。
static int VK_LEFT_PARENTHESIS
          用于 "(" 键的常量。
static int VK_LESS
           
static int VK_M
           
static int VK_META
           
static int VK_MINUS
          用于减号键 "-" 的常量
static int VK_MODECHANGE
           
static int VK_MULTIPLY
           
static int VK_N
           
static int VK_NONCONVERT
          用于 Don't Convert 功能键的常量。
static int VK_NUM_LOCK
           
static int VK_NUMBER_SIGN
          用于 "#" 键的常量。
static int VK_NUMPAD0
           
static int VK_NUMPAD1
           
static int VK_NUMPAD2
           
static int VK_NUMPAD3
           
static int VK_NUMPAD4
           
static int VK_NUMPAD5
           
static int VK_NUMPAD6
           
static int VK_NUMPAD7
           
static int VK_NUMPAD8
           
static int VK_NUMPAD9
           
static int VK_O
           
static int VK_OPEN_BRACKET
          用于左方括号键 "[" 的常量。
static int

JDK 1.6 中文手册