我使用以下代码捕获文档获得焦点时键入的所有字符:
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中正确编码的输入?
答案 0 :(得分:2)
event.getNativeKeyCode()
为您提供了一个关键代码,它不是一个字符。从文档:获取与此事件关联的密钥代码(与物理密钥关联的代码)。。按下键盘上的点给我190
。另外在Java char
中提到的是16位类型,而int是32位,即通常(char) integerVal
是不安全的操作。
现在您可能想要使用的是event.getNativeEvent().getCharCode()
。问题是0
中的KeyDownEvent
总是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());
。您的代码如下:
X-HTTP-Method-Override