Java 同一密钥的两个Eventhandler

Java 同一密钥的两个Eventhandler,java,javafx-8,Java,Javafx 8,我有一个JavaFX场景,有一个登录表单和一个注册表表单,从外部滑入场景。主锚链是root,另外两个是login\u form和register\u form。每个表单都有一个按钮-login调用login()和register调用register() login\u trigger和register\u trigger是两个按钮,可以让表单滑入。当登录表单滑入时,我应该能够在按Enter键时打开login()。登记表也是如此 我就是这么想的,但每当我按Enter键时,什么也没发生。它可以正常工

我有一个JavaFX场景,有一个登录表单和一个注册表表单,从外部滑入场景。主锚链是
root
,另外两个是
login\u form
register\u form
。每个表单都有一个按钮-
login
调用
login()
register
调用
register()

login\u trigger
register\u trigger
是两个按钮,可以让表单滑入。当登录表单滑入时,我应该能够在按Enter键时打开
login()
。登记表也是如此

我就是这么想的,但每当我按Enter键时,什么也没发生。它可以正常工作,按钮没有问题,但回车没有问题。我想将Eventhandler设置为显示的表单

我认为当我将EventHandler设置为null时,当窗体关闭时,以及当窗体打开时给它一个值时,它会起作用。还有别的方法吗?还是我的代码中有一个愚蠢的错误

login_trigger.setOnAction(e -> {
    if (login_form.getTranslateX() != 0) {
        openLogin.play();
        login.setOnKeyPressed(e2 -> {
            if (e2.getCode() == KeyCode.ENTER) {
                login();
            }
            });
        if (register_form.getTranslateX() != 1280) {
            closeRegister.setToX(1280);
            closeRegister.play();
        }
    } else {
        login.setOnKeyPressed(null);
        closeLogin.setToX(-250);
        closeLogin.play();
    }
});

register_trigger.setOnAction(e -> {
    if (register_form.getTranslateX() != 1030) {
        openRegister.play();
        register.setOnKeyPressed(e2 -> {
            if (e2.getCode() == KeyCode.ENTER) {
                register();
            }
        });
        if (login_form.getTranslateX() != -250) {
            closeLogin.setToX(-250);
            closeLogin.play();
        }
    } else {
        register.setOnKeyPressed(null);
        closeRegister.setToX(1280);
        closeRegister.play();
    }
});

不太清楚通过向按钮添加键处理程序尝试执行的操作:仅当控件具有键盘焦点时,才会处理键事件,除非按下按钮,否则按钮不太可能发生这种情况(在这种情况下,无论如何都会调用动作处理程序…)。如果按tab键直到按钮有焦点,然后按enter键,处理程序是否被调用?@James\u D yes。它在按钮聚焦时调用。将处理程序添加到根窗格而不是按钮。现在它起作用了。谢谢,我认为您真正需要的是文本字段上的操作事件处理程序。不太确定通过向按钮添加键处理程序来尝试执行什么操作:仅当控件具有键盘焦点时才会处理键事件,除非您按下按钮,否则按钮不太可能发生这种情况(在这种情况下,无论如何都会调用操作处理程序…)。如果按tab键直到按钮有焦点,然后按enter键,处理程序会被调用吗?@James_D yes。当按钮有焦点时它会调用。将处理程序添加到根窗格而不是按钮。现在它可以工作了。谢谢。我会想象您真正需要的是文本字段上的操作事件处理程序。