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 № 1Wenn 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.
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.