【问题标题】:javafx - KeyEvent.getCharacter() returns null-terminated characterjavafx - KeyEvent.getCharacter() 返回以空字符结尾的字符
【发布时间】:2017-12-05 03:35:51
【问题描述】:

我在 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 的构造运行良好。

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

【问题讨论】:

    标签: java user-interface events javafx


    【解决方案1】:

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

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

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

    【讨论】:

    • 哦,我上次浏览文档时错过了。有什么解决办法?有什么方法可以满足我的需求,就是将整个应用程序中的任何键捕获到缓冲区中,并在输入时保存一个字符串?
    • @saleph 使用onTyped 处理程序填充缓冲区,使用onPressed 处理程序处理“Enter”键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 2010-12-23
    • 2013-04-07
    相关资源
    最近更新 更多