Java键盘按键代码列表

13
有人可以给我提供在Java中KeyEvent类中用于键盘上各个按键的 Key Code 整数列表吗?
我想创建一个下拉列表,让用户选择所有键盘键。我需要特定于键盘的列表。 VK常量在这种情况下没有帮助,因为我需要键盘上使用的“键”的“列表”。 这篇文章并没有用,因为它是针对Javascript的,与javadoc相比,代码不是所有键的相同。此外,javadoc中使用的 KeyCode 值都按字母顺序排列,因此很难找到键盘键。我尝试通过谷歌搜索来源,但没有什么有趣的结果,只有Javascript的一个。
编辑:我知道VK。我需要使用KeyEvent.getKeyText函数将每个键盘键存储在下拉菜单中。因此我需要这个列表。这就是为什么我问自己是否需要自己编译它们。我应该先提到这一点。这样做每个键都是浪费时间。
5个回答

46
这是你的列表:
3 -- Cancel
8 -- Backspace
9 -- Tab
10 -- Enter
12 -- Clear
16 -- Shift
17 -- Ctrl
18 -- Alt
19 -- Pause
20 -- Caps Lock
21 -- Kana
24 -- Final
25 -- Kanji
27 -- Escape
28 -- Convert
29 -- No Convert
30 -- Accept
31 -- Mode Change
32 -- Space
33 -- Page Up
34 -- Page Down
35 -- End
36 -- Home
37 -- Left
38 -- Up
39 -- Right
40 -- Down
44 -- Comma
45 -- Minus
46 -- Period
47 -- Slash
48 -- 0
49 -- 1
50 -- 2
51 -- 3
52 -- 4
53 -- 5
54 -- 6
55 -- 7
56 -- 8
57 -- 9
59 -- Semicolon
61 -- Equals
65 -- A
66 -- B
67 -- C
68 -- D
69 -- E
70 -- F
71 -- G
72 -- H
73 -- I
74 -- J
75 -- K
76 -- L
77 -- M
78 -- N
79 -- O
80 -- P
81 -- Q
82 -- R
83 -- S
84 -- T
85 -- U
86 -- V
87 -- W
88 -- X
89 -- Y
90 -- Z
91 -- Open Bracket
92 -- Back Slash
93 -- Close Bracket
96 -- NumPad-0
97 -- NumPad-1
98 -- NumPad-2
99 -- NumPad-3
100 -- NumPad-4
101 -- NumPad-5
102 -- NumPad-6
103 -- NumPad-7
104 -- NumPad-8
105 -- NumPad-9
106 -- NumPad *
107 -- NumPad +
108 -- NumPad ,
109 -- NumPad -
110 -- NumPad .
111 -- NumPad /
112 -- F1
113 -- F2
114 -- F3
115 -- F4
116 -- F5
117 -- F6
118 -- F7
119 -- F8
120 -- F9
121 -- F10
122 -- F11
123 -- F12
127 -- Delete
128 -- Dead Grave
129 -- Dead Acute
130 -- Dead Circumflex
131 -- Dead Tilde
132 -- Dead Macron
133 -- Dead Breve
134 -- Dead Above Dot
135 -- Dead Diaeresis
136 -- Dead Above Ring
137 -- Dead Double Acute
138 -- Dead Caron
139 -- Dead Cedilla
140 -- Dead Ogonek
141 -- Dead Iota
142 -- Dead Voiced Sound
143 -- Dead Semivoiced Sound
144 -- Num Lock
145 -- Scroll Lock
150 -- Ampersand
151 -- Asterisk
152 -- Double Quote
153 -- Less
154 -- Print Screen
155 -- Insert
156 -- Help
157 -- Meta
160 -- Greater
161 -- Left Brace
162 -- Right Brace
192 -- Back Quote
222 -- Quote
224 -- Up
225 -- Down
226 -- Left
227 -- Right
240 -- Alphanumeric
241 -- Katakana
242 -- Hiragana
243 -- Full-Width
244 -- Half-Width
245 -- Roman Characters
256 -- All Candidates
257 -- Previous Candidate
258 -- Code Input
259 -- Japanese Katakana
260 -- Japanese Hiragana
261 -- Japanese Roman
262 -- Kana Lock
263 -- Input Method On/Off
512 -- At
513 -- Colon
514 -- Circumflex
515 -- Dollar
516 -- Euro
517 -- Exclamation Mark
518 -- Inverted Exclamation Mark
519 -- Left Parenthesis
520 -- Number Sign
521 -- Plus
522 -- Right Parenthesis
523 -- Underscore
524 -- Windows
525 -- Context Menu
61440 -- F13
61441 -- F14
61442 -- F15
61443 -- F16
61444 -- F17
61445 -- F18
61446 -- F19
61447 -- F20
61448 -- F21
61449 -- F22
61450 -- F23
61451 -- F24
65312 -- Compose
65368 -- Begin
65406 -- Alt Graph
65480 -- Stop
65481 -- Again
65482 -- Props
65483 -- Undo
65485 -- Copy
65487 -- Paste
65488 -- Find
65489 -- Cut

我用简单的暴力方法生成了它:

import java.awt.event.KeyEvent;                                                               
import java.lang.reflect.Field;                                                               
import java.lang.reflect.Modifier;                                                            
import java.util.*;                                                                           
                                                                                              
public class Test {                                                                           
    public static void main(String[] a) {                                                     
        for(int i = 0; i < 1000000; ++i) {                                                    
            String text = java.awt.event.KeyEvent.getKeyText(i);                              
            if(!text.contains("Unknown keyCode: ")) {                                         
                System.out.println("" + i + " -- " + text);                                   
            }                                                                                 
        }                                                                                     
                                                                                              
    }                                                                                         
}

我已经排除了“未知”的代码。


7
我知道这是一个老话题,但有人可能会发现这很有用。 - radrow
谢谢!只是好奇你从哪里获取这个信息的? - Adam_G
1
我只是用暴力破解法尝试了一些合理数量的密钥。说实话,这只是我在开始学习编程时随意发布的一个答案,但它仍然是我所有帖子中评分最高的一个。 - radrow

17

KeyEvent类具有这些值的静态字段。

例如,KeyEvent.VK_A代表“A”键。

要获取字段名称,可以使用反射:

Field[] fields = java.awt.event.KeyEvent.class.getDeclaredFields();
for (Field f : fields) {
    if (Modifier.isStatic(f.getModifiers())) {
        System.out.println(f.getName());
    } 
}

1
编辑答案。这将给出字段名。然后,您需要“编辑”字符串以放入下拉菜单中。 - Jean Waghetti
@AbdudDayanAdeeb,如果这个答案解决了你的问题,那么你应该接受它。 - camickr

5

1
这并没有帮助。我知道VK的存在。我的问题是如何编译KeyCode列表,而不是使用每个KeyCode。这就是为什么我问是否应该手动编译它们。 - Abdud Dayan Adeeb

1
您可以尝试此程序来获取 KeyEvent 类中所有字段的 int 值。
import java.awt.Robot; 
import java.awt.event.KeyEvent;
import java.awt.event.KeyEvent;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
public class RobotClass 
{ 
   public static void main(String[] args)  
   {   
      ArrayList<Integer> values = new ArrayList<>();
      try{
         Robot robot = new Robot();
         Field[] fields = java.awt.event.KeyEvent.class.getDeclaredFields();
         for (Field f : fields) {
            if (Modifier.isStatic(f.getModifiers())) {
               values.add(f.getInt(f.getName()));
           } 
         }         
      }
      catch(Exception e){
         Collections.sort(values);
         for(int i:values) System.out.println(i);
      }
   } 
}

-1

2
你的答案与被接受的答案完全相同,只是现在你链接到了一个不支持的Java版本。 - stdunbar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接