如何在javaFX

时间:2017-07-17 12:14:38

标签: javafx task changelistener

我正在使用JavaFX任务来执行耗时的代码,该代码处理for循环中的许多项目。 任务的进度由从for循环内部更新的进度条指示。 但是,除了进度条,我还有一些标签,用于指示要处理的项目总数和正在处理的当前项目的进度。 我试图将messageProperty任务绑定到标签textProperty,但我有多个需要更新的标签,messageProperty可以容纳一个String。 我考虑用逗号分隔值字符串更新messageProperty,然后像这样分割字符串

label1.textProperty().bind(task.messageProperty().toString().split(",")[0]);
label2.textProperty().bind(task.messageProperty().toString().split(",")[1]);
label3.textProperty().bind(task.messageProperty().toString().split(",")[2]);

然而我收到错误

The method bind(ObservableValue<? extends String>) in the type Property<String> is not applicable for the arguments (String)

所以我正在考虑向ChangeListener添加messageProperty并更新ChangeListener

内的标签

有人可以帮我确定哪种方法最好,以及如何为ChangeListener撰写messageProperty

1 个答案:

答案 0 :(得分:2)

无论

label1.textProperty.bind(Bindings.createStringBinding(
    () -> task.getMessage().split(",")[0],
    task.messageProperty());
//...

task.messageProperty().addListener((obs, oldMsg, newMsg) -> {
    label1.setText(newMsg.split(",")[0]);
    // ...
})