有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java更新JavaFX标签不适用于数据绑定

我试着在一个标签上写我自己的日志,但我遇到了用一个简单的解决方案更新标签的问题

所以在我谷歌搜索后,我在这里查看了这个解决方案: Displaying changing values in JavaFx Label

我不知道我是否做对了每件事,但不幸的是,这个解决方案不适合我

final static Label logLabel = new Label();
final static SimpleStringProperty logString = new SimpleStringProperty("test");
...
...
     public void start(Stage primaryStage) {


    TabPane tabPane = new TabPane();
    tabPane.getTabs().add(createSettingsTab());
    tabPane.getTabs().add(createParticipantTab());
    tabPane.getTabs().add(createSpectatorTab());
    tabPane.getTabs().add(createOverviewTab());
    tabPane.getTabs().add(createTournamentTab());
    tabPane.getTabs().add(createLogTab());
    tabPane.setTabClosingPolicy(TabClosingPolicy.UNAVAILABLE);


    Scene scene = new Scene(tabPane, 1200, 800);

    primaryStage.setScene(scene);
    primaryStage.setResizable(true);




    primaryStage.show();
}


private Tab createLogTab() {
// TODO Auto-generated method stub
            logLabel.textProperty().bind(logString);    
            Tab tab = new Tab("Log");
            tab.setContent(logLabel);
            return tab;
        }

为了初始化标签和设置新文本,我做了以下几行:

logString.set(logString.get() + "foo");

日志选项卡一直为空

我很感激任何帮助!谢谢

编辑//这是我能想到的唯一有用的mcve。正如我所说,创建其他选项卡的其他创建方法没有使用label或SimpleStringProperty

这是一个按钮,与标签不符

    buttonLoadConfig.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent e) {
                    System.out.println("test");
                    logString.set(logString.get() + "\ttest");

                    FileChooser fileChooser = new FileChooser();
                    fileChooser.setTitle("Choose Config");
                    File config = fileChooser.showOpenDialog(new Stage());
    }
});

共 (1) 个答案

  1. # 1 楼答案

    使用静态成员通常不是一个好主意,可能会导致您的问题

    当前编写的代码可以有多个选项卡,但只能有一个标签。您正在尝试将同一标签添加到多个选项卡。但是,当您这样做时,标签将从之前的选项卡中删除,因为JavaFX场景图的工作规则

    Node documentation

    If a program adds a child node to a Parent (including Group, Region, etc) and that node is already a child of a different Parent or the root of a Scene, the node is automatically (and silently) removed from its former parent.

    因此,绑定是有效的,但是,由于上述规则以及您编写其余代码的方式,整个程序可能无法按预期或希望的方式工作

    如果你仍然有问题,用mcve更新你的问题