【问题标题】:First key event jumps over the process第一个关键事件跳过流程
【发布时间】:2016-05-29 01:56:48
【问题描述】:

我一直在尝试查找有关我的错误的一些信息,但在过去几个小时内找不到任何相关信息。

我在控制器类中使用了这个关键事件处理方法。 onKeyPressed 位于根 BorderPane 上的 fxml 文件中。主类是标准的。

此方法是我的计算器应用程序的一部分,它从 keyCode 中提取一个字符并将其传递给其他方法。

问题是,正如在调试过程中看到的那样,在第一次按键时,它甚至不会尝试生成返回的字符串,而是直接跳转到方法的末尾。其他所有按下的键都正常处理。

如果我在最后一个花括号之前打印一些东西,它只会在第一次按键时打印在控制台上。

问题方法如下:

    public void handleKeys() {
    container.setOnKeyPressed(key -> {
        String returned = key.getCode().toString().toLowerCase();
        char chr = '0';
        switch (returned) {
            case "add":
                chr = '+';
                break;
            default:
                if (Character.toString(returned.charAt(returned.length() - 1)).matches("\\d") && returned.charAt(returned.length() - 2) != 'f') {
                    chr = returned.charAt(returned.length() - 1);
                    break;
                }
        }
        handleSymbols(chr);
    });
}

据我了解,在第一次按键时,setOnKeyPressed 方法被初始化,它会跳过以下代码。我想我应该以某种方式将最后一个花括号的过程转发回 键-> {部分。但是怎么做呢?

【问题讨论】:

    标签: java javafx-8 keyevent


    【解决方案1】:

    如果您在 FXML 中注册处理程序,大概(您没有发布代码)类似

    <BorderPane fx:id="container" onKeyPressed="#handleKeys" ... >
    

    那么处理程序已经注册:您不需要在控制器代码中再次注册它。当事件发生时调用您指定的方法。所以你只需要那个方法来实现你需要的功能:

    public void handleKeys(KeyEvent key) {
        String returned = key.getCode().toString().toLowerCase();
        char chr = '0';
        switch (returned) {
            case "add":
                chr = '+';
                break;
            default:
                if (Character.toString(returned.charAt(returned.length() - 1)).matches("\\d") && returned.charAt(returned.length() - 2) != 'f') {
                    chr = returned.charAt(returned.length() - 1);
                    break;
                }
        }
        handleSymbols(chr);
    }
    

    【讨论】:

    • 是的,它确实有效!感谢您节省了我的时间和头痛!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多