我正在使用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
?
答案 0 :(得分:2)
无论
label1.textProperty.bind(Bindings.createStringBinding(
() -> task.getMessage().split(",")[0],
task.messageProperty());
//...
或
task.messageProperty().addListener((obs, oldMsg, newMsg) -> {
label1.setText(newMsg.split(",")[0]);
// ...
})