java - 更新 JavaFX 标签不适用于数据绑定(bind)

标签 java javafx label

我尝试在选项卡中写入我的“自己的”日志,但在使用我的简单解决方案更新标签时遇到了问题。

所以在我用谷歌搜索后,我在这里查看了这个解决方案: 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");

日志选项卡一直为空白...

如果有任何帮助,我将不胜感激!谢谢!

edit//这是我能想到的唯一有用的 mcve。正如我所说,创建其他选项卡的其他创建方法没有使用标签或 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());
    }
});

最佳答案

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

您当前编写的代码可以有许多选项卡,但只能有一个标签。您正在尝试将相同的标签添加到多个选项卡。但是,当您这样做时,由于 JavaFX Scenegraph 工作方式的规则,该标签将从之前的选项卡中删除。

请参阅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.

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

如果您仍然遇到问题,请使用 mcve 更新您的问题.

关于java - 更新 JavaFX 标签不适用于数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31080280/

相关文章:

r - 使用haven导入Stata数据后访问变量标签的便捷方法

java - 如何解决 "Could not find artifact com.ohadr:authentication-flows"?

JAVAFX缩放,在ScrollPane中滚动

c# - 将来自 webform 的物理标签存储到列表 C#

java - 在javaFx中,为什么在向窗口添加元素时为什么需要调用 “getChildren()”?

javafx - 按下按钮时如何检测鼠标在节点上的移动?

无法调用 Python tkinter 标签

java - Spigot InventoryClickEvent 仅在第二次单击时在库存中查找项目

java - Java中两个日期之间的天数差异?

java - import javafx 无法解析