从其他类调用JavaFX Controller方法

时间:2017-10-13 07:00:25

标签: java sockets javafx controller fxml

我正在尝试将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设置标签?

1 个答案:

答案 0 :(得分:0)

如果您严格遵守模型 - 视图 - 控制器概念,我不会按照您想要的方式执行此操作。模型不应直接访问Controller / View。控制器应该调用模型。

enter image description here

MVC Wikipedia

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