如何将更改侦听器添加到 javaFX 中任务的消息 属性
How to add change listener to message property of task in javaFX
我正在使用 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
中更新标签
有人可以帮我确定哪种方法最好以及如何为 messageProperty
编写 ChangeListener
吗?
两者都
label1.textProperty.bind(Bindings.createStringBinding(
() -> task.getMessage().split(",")[0],
task.messageProperty());
//...
或
task.messageProperty().addListener((obs, oldMsg, newMsg) -> {
label1.setText(newMsg.split(",")[0]);
// ...
})
我正在使用 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
有人可以帮我确定哪种方法最好以及如何为 messageProperty
编写 ChangeListener
吗?
两者都
label1.textProperty.bind(Bindings.createStringBinding(
() -> task.getMessage().split(",")[0],
task.messageProperty());
//...
或
task.messageProperty().addListener((obs, oldMsg, newMsg) -> {
label1.setText(newMsg.split(",")[0]);
// ...
})