在 Java FXML 中禁用来自另一个控制器的按钮

Disabling a button from another controller in JavaFXML

我正在开发一个 netbeansIDE javaFXML 项目,当我使用用户名和密码登录到第二个屏幕时,我希望禁用第二个屏幕按钮。我试图通过使用 Getter 来禁用另一个控制器中的按钮,但是当我登录时没有任何反应。 我真的希望能有所帮助,我试图搜索帮助并找到了一些,并尝试但以这个结束,现在我被困住了。

这是我的代码:

{@FXML
private void handleLogin(ActionEvent event) throws IOException {

    String username = txtUsername.getText();
    String password = txtPassword.getText();

    Button pressed_button = (Button) event.getSource();

    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(getClass().getResource("Screen3_Scada.fxml"));
    loader.load();
     if(pressed_button==btnscadalogin){
        if (loginLoad.validateSCADA(username, password)) {

            try {
                AnchorPane pane = FXMLLoader.load(getClass().getResource("Screen3_Scada.fxml"));
                 RootPane.getChildren().setAll(pane);

                 Screen3_Scada_Controller getbtnPLC = loader.getController();
                 getbtnPLC.getBtngotoPLC().setDisable(true);

             }catch (IOException ex) {
                System.err.println("Error in method GotoScreen2 class FXML_Screen1_loginController");
             }

        }else{
            System.err.println("Error, wrong username or password");
        }


    }
}}

您正在加载场景两次:

loader.load();
...
AnchorPane pane = FXMLLoader.load(getClass().getResource("Screen3_Scada.fxml"));

getbtnPLC 不是加载场景时创建的控制器实例,您添加到现有场景中。

您应该使用作为 loader.load(); 调用结果的加载结果:

if (pressed_button == btnscadalogin) {
    if (loginLoad.validateSCADA(username, password)) {
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(getClass().getResource("Screen3_Scada.fxml"));

        try {
            AnchorPane pane = loader.load();
            RootPane.getChildren().setAll(pane);

            Screen3_Scada_Controller getbtnPLC = loader.getController();
            getbtnPLC.getBtngotoPLC().setDisable(true);

        } catch (IOException ex) {
            System.err.println("Error in method GotoScreen2 class FXML_Screen1_loginController");
        }
   }

我确实建议使用不同的方法来处理来自不同来源的 ActionEvent。这通常比检查多个节点中的哪一个是事件源更好。