2017-10-13 12 views
0

J'essaie d'obtenir un GUI JavaFX combiné avec une communication Socket en cours d'exécution.JavaMX Controller mehtod appel d'une autre classe

J'ai donc 4 classes.

SocketClient: gère l'entrée/sortie de données. Lorsque le client est connecté à un serveur, une étiquette sur l'interface graphique doit changer.

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: ce contrôleur doit définir le texte de l'étiquette lorsque le client est connecté.

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

GUI: chargement est l'interface utilisateur graphique (chargement 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(); 

principal: lance l'interface utilisateur graphique (GUI: lancement (GUI.class)

donc où et comment puis-je utiliser le contrôleur pour définir l'étiquette?

Répondre

0

Si vous respectez rigoureusement le concept Model-View-Controller, je ne le ferais pas comme vous le souhaitez Le modèle ne devrait pas accéder au contrôleur/Voir directement. devrait appeler le modèle.

enter image description here

MVC Wikipedia

Cependant, vous pouvez bien sûr faire de cette façon. Stockez simplement la variable controller que vous avez lors de l'initialisation du Contrôleur/Vue et transmettez-la de votre MainApp à l'endroit où vous le souhaitez et appelez les méthodes à partir de là.

+0

Alors, le contrôleur demande au modèle (SocketClient) de nouvelles données? – Waeuk

+0

Si vous allez strictement le long du concept, oui. En théorie, le modèle devrait être complètement indépendant. Le contrôleur est le niveau qui gère ce qui est mis sur la vue. Comme je l'ai dit, vous trouverez toujours un moyen de «violer» cela et ce sera parfois plus facile, mais pour une chose aussi simple, je m'en tiendrai au concept. –

+0

Le contrôleur peut-il s'exécuter en tant que thread, car il doit périodiquement demander s'il y a des données sur le socket. – Waeuk