我正在尝试将JavaFX GUi与Socket通信一起运行。
所以我有4个课程。
SocketClient:处理数据输入/输出。当客户端连接到服务器时,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:此Controller应在连接客户端时设置标签文本。
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();
Main:正在启动GUi(GUI:launch(GUI.class)
那么我在哪里以及如何使用Controller设置标签?
答案 0 :(得分:0)
如果您严格遵守模型 - 视图 - 控制器概念,我不会按照您想要的方式执行此操作。模型不应直接访问Controller / View。控制器应该调用模型。
但是,你当然可以这样做。只需存储启动Controller / View时的controller
变量,并将其从MainApp传递到您想要的地方,然后从那里调用方法。