javafx - KeyEvent.getCharacter()返回以null结尾的字符

时间:2017-07-01 08:32:13

标签: java user-interface events javafx

我对javafx 2.0中的KeyEvent处理有以下问题。这个代码在start方法中:

scene.addEventHandler(KeyEvent.ANY, e -> System.out.format(
                        "Type: {%s},\tCode: {%s},\tchar: {%s}%n", 
                        e.getEventType(), e.getCode(), e.getCharacter());
);

产生

Type: {KEY_PRESSED},    Code: {A},          char: {
Type: {KEY_TYPED},      Code: {UNDEFINED},  char: {a}
Type: {KEY_RELEASED},   Code: {A},          char: {

(与其他键和方法e.setOnKey{Pressed, Released, Typed}()相同)

看起来e.getCharacter()会返回'\0'。问题出在哪儿?在我的应用程序中,我需要立即获取代码和键入的键的值。有趣的是,几天前KeyEvent.KEY_PRESSED的构造效果非常好。

USECASE: 我是从条形码扫描仪扫描键盘输入,它使用enter结束每个代码(我必须与其他字符区分开来)。

1 个答案:

答案 0 :(得分:1)

getCharacter方法仅返回KEY_TYPED个事件的有意义数据,see javadoc (emphasis mine)

  

字符变量始终包含有效的Unicode字符或CHAR_UNDEFINED。键输入事件报告字符输入;按下 键和键释放事件不一定与字符输入 相关联。因此,保证字符变量仅对键入的事件有意义。

CHAR_UNDEFINED包含"\u0000",这就是您获得此结果的原因。