来自其他 class 的 JavaFX 控制器方法调用
JavaFX Controller method call from other class
我正在尝试将 JavaFX GUI 与套接字通信相结合 运行。
所以我得到了 4 类。
SocketClient:正在处理数据 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 (GUI:launch(GUI.class)
那么在哪里以及如何使用控制器设置标签?
如果你严格遵守模型-视图-控制器的概念,我不会按照你想要的方式去做。模型不应直接访问 Controller/View。控制器应调用模型。
但是,您当然可以那样做。只需存储启动 Controller/View 时拥有的 controller
变量,并将其从 MainApp 传递到您想要的任何地方,然后从那里调用方法。
我正在尝试将 JavaFX GUI 与套接字通信相结合 运行。
所以我得到了 4 类。
SocketClient:正在处理数据 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 (GUI:launch(GUI.class)
那么在哪里以及如何使用控制器设置标签?
如果你严格遵守模型-视图-控制器的概念,我不会按照你想要的方式去做。模型不应直接访问 Controller/View。控制器应调用模型。
但是,您当然可以那样做。只需存储启动 Controller/View 时拥有的 controller
变量,并将其从 MainApp 传递到您想要的任何地方,然后从那里调用方法。