2017-10-13 5 views
0

Ich versuche, eine JavaFX GUi kombiniert mit einer Socket-Kommunikation läuft.JavaFX Controller Mehtod Anruf von anderen Klasse

So bekam ich 4 Klassen.

SocketClient: behandelt den Dateneingang/-ausgang. Wenn der Client mit einem Server verbunden ist, sollte sich ein Label auf der GUI ändern.

GUIController: Dieser Controller sollte den Text des Etiketts festlegen, wenn der Client verbunden ist.

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

GUI: wird das Laden der GUI (Laden 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: Start (GUI.class)

So Wo und wie verwende ich den Controller zum Setzen des Labels?

Antwort

0

Wenn Sie sich streng an das Model-View-Controller-Konzept halten, würde ich es nicht so machen, wie Sie es wollen.Das Model sollte nicht auf den Controller zugreifen/Direkt anzeigen: Der Controller sollte das Model anrufen.

enter image description here

MVC Wikipedia

Sie können aber natürlich tun es auf diese Weise. Speichern Sie einfach die controller Variable, die Sie haben, wenn Sie den Controller/View initiieren, und übergeben Sie ihn von Ihrer MainApp dorthin, wo Sie ihn haben wollen, und rufen Sie Methoden von dort auf.

+0

Also fragt der Controller das Model (SocketClient) nach neuen Daten? – Waeuk

+0

Wenn Sie streng entlang des Konzepts gehen, ja. Theoretisch sollte das Modell vollständig unabhängig sein. Der Controller ist die Ebene, die verwaltet, was in die Ansicht eingefügt wird. Wie gesagt, Sie werden immer einen Weg finden, dies zu "verletzen", und es wird manchmal einfacher sein, aber für so eine einfache Sache würde ich mich an das Konzept halten. –

+0

Kann der Controller als Thread ausgeführt werden, da er regelmäßig nachfragen muss, ob sich Daten im Socket befinden. – Waeuk

Verwandte Themen