Вызов метода JavaFX Controller из другого класса

Я пытаюсь получить графический интерфейс JavaFX в сочетании с работой Socket.

Итак, я получил 4 класса.

SocketClient: обрабатывает ввод / вывод данных. Когда клиент подключен к серверу, метка в графическом интерфейсе должна измениться.

private void openSocket() {
    try {
        client = new Socket();
        client.setReuseAddress(true);
        client.connect(new InetSocketAddress(SERVER_IP,SOCKET_PORT),10);
        //Where do I get the Controller From?
        //guiController = loader.getController();
        //guiController.setLabel("Connected");
    }catch (Exception e) {
    }
}

GUIController: этот контроллер должен установить текст метки, когда клиент подключен.

public void setLabel(String status) {
    label.setText(status);
}

GUI: загружается GUI (загружается GUI.FXML....)

   FXMLLoader loader = new FXMLLoader (getClass().getResource("GUI.fxml"));
        VBox root = (VBox)loader.load();
        guiController = loader.getController();
        \\This is Working
        guiController.setLabel("test");
        Scene scene = new Scene(root,root.getPrefWidth(),root.getPrefHeight());
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
        mainStage.setScene(scene);
        mainStage.setResizable(false);
        mainStage.show();

Main: запускает графический интерфейс (GUI: запуск (GUI.class)

Так где и как я могу использовать контроллер для установки метки?

1 ответ

Решение

Если вы строго придерживаетесь концепции Model-View-Controller, я бы не стал делать это так, как вы хотите. Модель не должна обращаться к контроллеру / представлению напрямую. Контроллер должен вызвать модель.

MVC Википедия

Тем не менее, вы, конечно, можете сделать это таким образом. Просто сохраните controller переменная, которая есть у вас при запуске Controller/View и передается из MainApp туда, где вы этого хотите, и вызывает методы оттуда.

Другие вопросы по тегам