/ / JavaFX Controller-Methodenaufruf aus einer anderen Klasse - Java, Sockets, Javafx, Controller, fxml

Aufruf der JavaFX-Controller-Methode von einer anderen Klasse - Java, Sockets, Javafx, Controller, fxml

Ich versuche, eine JavaFX-GUi in Verbindung mit einer Socket-Kommunikation zum Laufen zu bringen.

Also habe ich 4 Klassen bekommen.

SocketClient: behandelt die Datenein- / ausgabe. Wenn der Client mit einem Server verbunden ist, sollte sich ein Label auf der GUI ändern.

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: Dieser Controller sollte den Text des Labels festlegen, wenn der Client verbunden ist.

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

GUI: lädt die GUI (lädt 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: Startet die GUi (GUI: launch (GUI.class))

Wo und wie verwende ich den Controller, um das Label festzulegen?

Antworten:

0 für die Antwort № 1

Wenn Sie sich strikt an das Model-View-Controller-Konzept halten, würde ich es nicht so machen, wie Sie es möchten. Das Modell sollte nicht direkt auf den Controller / View zugreifen. Der Controller sollte das Modell aufrufen.

Bildbeschreibung hier eingeben

MVC Wikipedia

Sie können das natürlich auch so machen. Speichern Sie einfach die controller Variable, die Sie beim Initiieren des Controllers / View haben, und übergeben Sie sie von Ihrer MainApp an die gewünschte Stelle und rufen Sie von dort aus Methoden auf.