私はJavaFX GUiとSocket通信の実行を組み合わせようとしています。JavaFXコントローラmehtodの他のクラスからの呼び出し
私は4つのクラスを得ました。
SocketClient:Data In/Outputを処理しています。クライアントがサーバーに接続されると、GUI上のラベルが変更されます。
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();
メインをロードしている:だから打ち上げ(GUI.class)
:GUI(GUIを起動していますコントローラを使用してラベルを設定する場所と方法を教えてください。
すると、コントローラはモデル(SocketClient)に新しいデータを要求しますか? – Waeuk
あなたが厳密にコンセプトに従えば、はい。理論的には、モデルは完全に独立していなければなりません。コントローラは、ビューに配置されるものを管理するレベルです。私が言ったように、あなたはいつもそれを「違反する」方法を見つけ出し、時にはより簡単になりますが、このような簡単なことのために私はそのコンセプトに固執します。 –
コントローラはスレッドとして実行できます。なぜなら、Socketに何らかのデータがあるかどうか定期的に確認する必要があるからです。 – Waeuk