【问题标题】:Java Keyboard Keycodes listJava 键盘键码列表
【发布时间】:2013-02-25 03:31:40
【问题描述】:

任何人都可以为我提供键盘上用于 java 中的 KeyEvent 类的各个键的键代码整数列表吗?

我想创建一个包含所有键盘键的下拉列表供用户选择。我需要特定于键盘的列表。 VK 常量在这种情况下没有帮助,因为我需要键盘上使用的键的“列表”。 This post here 没有被使用,因为它用于 Javascript,并且与 javadoc 相比,所有键的代码都不相同。 javadoc 中使用的 KeyCode 值也都是按字母顺序排列的,所以很难找到那里的键盘键。我试着用谷歌搜索资源,但没有什么有趣的只是 Javascript 的。我应该自己一个一个编译还是有更简单的方法?

编辑:我知道 VK。我需要使用 KeyEvent.getKeyText 函数将每个键盘键存储在下拉菜单中。所以我需要这份清单。这就是为什么我问我是否需要自己编译它们。我应该早点提到这一点。对每个键都这样做是浪费时间。

【问题讨论】:

    标签: java applet keylistener keyevent


    【解决方案1】:

    这是你的清单:

    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);                                   
                }                                                                                 
            }                                                                                     
                                                                                                  
        }                                                                                         
    }
    

    我已排除“未知”代码。

    【讨论】:

    • 我知道这是个老话题,但有人可能会觉得这很有帮助
    • 谢谢!只是好奇你是从哪里弄来的?
    • 只是将所有键强制设置为某个合理的数字。这只是我开始学习实际编程时发布的一个随机答案,它仍然是我所有帖子中评价最高的一个
    【解决方案2】:

    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());
        } 
    }
    

    【讨论】:

    • 编辑了答案。这将给出字段名称。然后您需要“编辑”要放入下拉菜单的字符串。
    • 感谢您的帮助。这是完美的。
    • @AbdudDayanAdeeb,如果这解决了您的问题,那么您应该接受答案。
    【解决方案3】:

    您无需知道键码的确切值。 KeyEvent 类具有定义所有关键代码的常量字段:

    KeyEvent.VK_A
    KeyEvent.VK_ENTER
    KeyEvent.VK_SPACE
    

    等等

    请仔细阅读 Javadoc。所有的常量值也可以在这里找到:

    http://docs.oracle.com/javase/7/docs/api/constant-values.html

    【讨论】:

    • 没用。我知道VK。我的问题是关于编译 KeyCode 列表而不是使用每个 KeyCode。这就是为什么我问我是否应该手动编译它们。
    【解决方案4】:

    你可以试试这个程序来获取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);
          }
       } 
    }
    

    【讨论】:

      【解决方案5】:

      Java™ Platform Standard Ed. 7

      在那里寻找“java.awt.event.KeyEvent”部分;

      【讨论】:

      • 您的答案与接受的答案完全相同,只是现在您链接到不受支持的 Java 版本。
      猜你喜欢
      • 2019-11-30
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 2014-09-18
      • 1970-01-01
      相关资源
      最近更新 更多