Отключение кнопки от другого контроллера в JavaFXML - PullRequest
0 голосов
/ 30 августа 2018

Я работаю над проектом 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");
        }


    }
}}

1 Ответ

0 голосов
/ 30 августа 2018

Вы загружаете сцену дважды:

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 s из разных источников. Обычно это лучшая альтернатива, чем проверка того, какой из нескольких узлов является источником события.

...