Контроллер для каждого fxml (JavaFX) - PullRequest
0 голосов
/ 22 мая 2018

Я хочу установить для каждого fxml один контроллер.Эти контроллеры должны быть в состоянии взаимодействовать, но я всегда получаю NullPointerException.У меня есть один FXML с Button и один FXML с TextField.Если я нажму Button, TextField должен добавить.Я немного уменьшил код.Я знаю, что эти вопросы задают много раз, но у меня ничего не получается.

Вот мой код:
Контроллер для LogStage.fxml.Вот TextArea, где я бы установил текст.

public class LogController{
    @FXML private TextArea logTextAreaFx;
    public void handlelogTextAreaFX(ActionEvent event, String text){
        logTextAreaFx.appendText(text);
    }
}

Контроллер для MainStage.fxml.Главное окно с Button, которому следует установить TextArea, если он активирован.

public class MainController{
    @FXML LogController logController;
    public void handleChatConsoleButton(ActionEvent event){
        logController.handlelogTextAreaFX(event, "test");
    }
}

LogStage.fxml:

<VBox prefWidth="500" prefHeight="300" id="logView" fx:controller="LogController" xmlns:fx="http://javafx.com/fxml" >
    <TextArea text="-------- Log ---------" id="logTextArea" fx:id="logTextAreaFx"></TextArea>
</VBox>

MainStage.fxml:

<VBox minHeight="520" minWidth="1280" fx:controller="MainController" xmlns:fx="http://javafx.com/fxml">
    <Button text="test Button" onAction="#handleChatConsoleButton"></Button>
</VBox>

Главный контроллер.Эти контроллеры должны установить все контроллеры и экземпляры и запустить GameView.

public class ClientController {
    private ClientView clientView;
    @FXML private MainController mainController;
    @FXML private LogController logController;
    public ClientController(){
        this.clientView = new ClientView();
    }
    public void showView(){
        this.clientView.startView();
    }
    public void setText(String text){
        logController.handlelogTextAreaFX(null, "hello world");
    }
}

. Эти классы запускают все приложение.

public class GameMain {
    static ClientController controller;
    public static void main(String[] args){
        controller = new ClientController();
        controller.showView();
    }
}

ClientView устанавливает все поля и запускает fxml.

public class ClientView extends Application{
    VBox root = new VBox();
    VBox mainStage;
    public void startView(){
        launch();
    }
    @Override
    public void start(Stage primaryStage) throws Exception {
        Scene scene = new Scene(root);
        loadMainStage();
        loadLogStage();
        primaryStage.setScene(scene);
        primaryStage.show();
    }


     @FXML Pane MainStage;
    public void loadMainStage(){
        mainStage = new VBox();
        try {
            mainStage = FXMLLoader.load(getClass().getClassLoader().getResource("MainStage.fxml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        root.getChildren().add(mainStage);
    }
    @FXML VBox LogStage;
    public void loadLogStage(){
        //ClientController controller = new ClientController();
        FXMLLoader loader = new FXMLLoader();
        Pane root = new Pane();
        Scene chatScene = new Scene(root);
        Stage stage = new Stage();
        stage.setTitle("Log View");
        stage.setScene(chatScene);
        stage.setResizable(true);
        try {
            //loader.setController(controller);
            LogStage = loader.load(getClass().getClassLoader().getResource("LogStage.fxml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        root.getChildren().add(LogStage);
        stage.show();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...