Вызов метода 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, я бы не стал делать это так, как вы хотите. Модель не должна обращаться к контроллеру / представлению напрямую. Контроллер должен вызвать модель.
Тем не менее, вы, конечно, можете сделать это таким образом. Просто сохраните controller
переменная, которая есть у вас при запуске Controller/View и передается из MainApp туда, где вы этого хотите, и вызывает методы оттуда.