2016-06-24 61 views
0

我希望所有VK值的陣列,這樣我可以問,如果一個鍵被按下什麼是KeyEvent.VK_的最大可能值*

public class Input implements KeyListener{ 

    boolean[] keyPressed = new boolean [1000]; 

    @Override 
    public void keyPressed(KeyEvent arg0) { 
     keyPressed[arg0.getKeyCode()] = true; 
    } 

    @Override 
    public void keyReleased(KeyEvent arg0) { 
     keyPressed[ arg0.getKeyCode() ] = false; 
    } 

    @Override 
    public void keyTyped(KeyEvent arg0) {} 

} 

任何一個可以告訴我 - 什麼是最大和最小VK值?

我不希望Oracle有一天添加新的VK值並破壞我的代碼。

是否有「limits.h」風格的方式我可以動態設置它?

+0

我會*最終*同時使用keyPressed值...還沒有找到同步,我還沒有準備好穿越那座橋。 – gbtimmon

回答

2

使用的KeyEvent:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/awt/event/KeyEvent.java

達到的最高值(使用Unicode表示):

public static final char CHAR_UNDEFINED = 0xFFFF; 
十進制

或65535。

這是未定義的非Unicode字符的未映射值。

一個有效事件的最高限定值是:

public static final int VK_BEGIN     = 0xFF58; 

或十進制65368。

如果你罰款切斷一些特殊功能的最高映射值是:

public static final int VK_CONTEXT_MENU    = 0x020D; 

或十進制525。

最低定義的值是:

public static final int VK_UNDEFINED  = 0x0; 

或0十進制。

顯然,真正的最大值和真實最小值不能從鍵盤上實現,但它們作爲合理的硬編碼限制。 VK_CANCEL進入0x03潛在的最低實際可用映射值。

+0

嗯,一個完整的16位VK_值對我來說似乎有些過火,但是感謝這個信息,它非常有幫助 - 我不得不做一個初始化過程,它決定了我實際已經映射的所有密鑰的最大值,並且從那裏開始。 – gbtimmon

+0

你知道我是否能夠在任何地方都擁有正面的VK_值? – gbtimmon

+0

是否存在負面的unicode值?嚴重的問題。 – Compass

相關問題