2016-11-05 52 views
0

我抓住,而该文件是使用下面的代码获得焦点的所有字符类型:onKeyDown事件不正确编码

RootPanel.get().addDomHandler(new KeyDownHandler() { 

      @Override 
      public void onKeyDown(KeyDownEvent event) { 
       char key = (char) event.getNativeKeyCode(); 
       String keyString = String.valueOf(key); 
       if (!event.isShiftKeyDown()) 
        keyString = keyString.toLowerCase(); 
       System.out.print(keyString); 

      } 
     }, KeyDownEvent.getType()); 

当正在发送关键事件的设备是使用ASCII(我们无法控制编码被使用的)那么,我们得到以下的输出:

www¾mitcom¾m3

我们能做些什么使我们得到Java中的正确编码输入?

回答

2

event.getNativeKeyCode()给你一个关键代码,它不是一个字符。来自文档:获取与此事件关联的密钥代码(与物理密钥关联的代码)。。点击我的键盘给我190。在Java char中还提及的是16位类型,而int是32位,即通常(char) integerVal是不安全的操作。

现在你可能想要使用的是event.getNativeEvent().getCharCode()。问题在于KeyDownEvent中始终为0。因此,我建议使用KeyPressHandler & KeyPressEvent。你的代码看起来像:

private void onKeyPress(KeyPressEvent event) { 
    char c = (char) event.getNativeEvent().getCharCode(); 
    String s = String.valueOf(c); 
    if (event.isShiftKeyDown()) { 
    s = s.toUpperCase(); 
    } 

    GWT.log(s); 
} 

RootPanel.get().addDomHandler(this::onKeyPress, KeyPressEvent.getType()); 
+1

这是一个非常美丽的答案。谢谢。 –