メイン画面の UI に 1 つの進行状況インジケーターがあり、さまざまなタブやサービスで共有されています。各 TabController には、独自の Service インスタンスがあります。私の MainController クラスでは、タブごとに、各サービスの進行状況プロパティを ProgressIndicator にバインドしました。
@FXML
Region veil;
@FXML
ProgressIndicator progressDial;
progressDial.progressProperty().bind(tabController.commandService.progressProperty());
veil.visibleProperty().bind(tabController.commandService.runningProperty());
progressDial.visibleProperty().bind(tabController.commandService.runningProperty());
tabController.commandService.messageProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> ov, String t, String newValue) {
addCommentary(newValue);
}
});
ただし、最初のサービスがそれを使用した後、後続のサービスまたはタスクの実行に対してプログレス ダイヤルが表示されないことがわかります。各サービスはおそらく同時に実行されるため、ProgressIndicator を誤用しているかどうか疑問に思っています。最初の終了後に進行状況がリセットされなかったと推測しています。どうすればリセットできますか? 進行状況プロパティは読み取り専用です。
ReadOnlyDoubleProperty progressProperty() 進行状況を表す ReadOnlyDoubleProperty を取得します。
updateProgress(0) を呼び出しても、ダイヤルが再表示されることはありません。
ProgressIndicator をグローバルとして使用して明示的にリセットしようとしました
mainController.progressDial.setProgress(0);
しかし、これは失敗しました
java.lang.RuntimeException: A bound value cannot be set.
at javafx.beans.property.DoublePropertyBase.set(DoublePropertyBase.java:159)
私は間違っているかもしれませんが、これは JavaFX UI コントロールの設計上の問題だと思います。進行状況を 0 に更新すると、進行状況インジケーターがリセットされます。