来自其他 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。控制器应调用模型。

MVC Wikipedia

但是,您当然可以那样做。只需存储启动 Controller/View 时拥有的 controller 变量,并将其从 MainApp 传递到您想要的任何地方,然后从那里调用方法。