返回更新的Javafx控制器

时间:2016-05-30 08:00:31

标签: java javafx-8

目标是打印标签的CURRENT文本。标签在整个程序中不断变化,使用我目前的方法,我只能检索标签的初始化值。

我用来检索控制器实例的内容:

public class ShowWindow {
    public static <T> T getController(String path){
        try {
            FXMLLoader fxmlLoader = new FXMLLoader(ShowWindow.class.getResource(path));
            Parent root = fxmlLoader.load();
            return fxmlLoader.getController();
        }catch(IOException ex){
            ex.printStackTrace();
        }
        return null;
    }
}

这是从main调用函数的块:

private void close(Stage stage) {
    String name = ShowWindow.<MainController>getController(fxmlFile).nameLabel.getText();
    System.out.println(name);
    stage.close();
}

主控制器

public class MainController implements Initializable {
    // Label.
    // Code that changes label.
}

一切都有帮助,并提前感谢。

编辑: 另一个show window函数在返回fxml文件的控制器时似乎有效,但在这种情况下它显示文件然后返回控制器。

public class ShowWindow {
    public static <T> T showWindow(String path){
        try {
            FXMLLoader fxmlLoader = new FXMLLoader(ShowWindow.class.getResource(path));
            Parent root = fxmlLoader.load();
            Stage stage = new Stage();
            stage.initModality(Modality.APPLICATION_MODAL);
            stage.setScene(new Scene(root)); 
            stage.showAndWait();
            return fxmlLoader.getController();
        }catch(IOException ex){
            ex.printStackTrace();
        }
        return null;
    }
}

1 个答案:

答案 0 :(得分:0)

这是物业会派上用场的地方。您的代码目前仅检索初始值,使用属性监视标签文本何时更改:

label.textProperty().addListener(new ChangeListener<String>() {
        @Override
        public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
            System.out.println(newValue);
        }
 });