2017-07-17 84 views
0

我正在使用JavaFX任務來執行處理for循環中的多個項目的耗時代碼。 任務的進度通過在for循環內更新的進度條指示。 但是,除了進度條之外,我還有一些標籤,用於指示要處理的總項目和當前正在處理的項目的進度。 我試圖將任務的messageProperty綁定到標籤textProperty,但是我有多個需要更新的標籤,並且messageProperty可以容納一個String。 我認爲用逗號分隔值的字符串更新messageProperty然後分裂這樣如何在javaFX中添加更改偵聽器到任務的消息屬性

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) 

所以我正在考慮加入ChangeListenermessageProperty和更新ChangeListener

有人可以幫我確定哪種方法最好,以及如何編寫ChangeListenermessageProperty

回答

1

要麼

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

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