JavaFX ProgressBar / ProgressIndicator:从多个Sliders中监听更改

时间:2016-11-29 20:51:47

标签: java javafx data-binding progress-bar

情况:有多个滑块|希望进度条随每个滑块移动而改变。现在只有一个滑块会移动进度条,但文本字段会显示所有数据。

有更好的方法吗?

这是我的代码:

@FXML
ProgressIndicator pb;

@FXML
Slider slider1, slider2, slider3, slider4, slider5, slider6, slider7, slider8;

@Override
public void initialize(URL location, ResourceBundle resources) {

  field.textProperty().bind(Bindings.concat(
            slider1.valueProperty()
            .add(slider2.valueProperty()
            .add(slider3.valueProperty()
            .add(slider4.valueProperty()
            .add(slider5.valueProperty()
            .add(slider6.valueProperty()
            .add(slider7.valueProperty()
            .add(slider8.valueProperty())))))))));

       slider1.valueProperty().addListener(
            (ObservableValue<? extends Number> ov, Number old_val,
             Number new_val) -> {
                    //sets the Progress bar to new value
                pb.setProgress(new_val.doubleValue());


            });
            }

        }

slider example

1 个答案:

答案 0 :(得分:1)

您可以简单地将progressProperty的{​​{1}}绑定到ProgressIndicator的{​​{1}},同时请注意指标的valueProperty 0到1的边界:

  

介于0和1之间的正值表示进度百分比   其中0为0%,1为100%。

示例:

Slider

会产生这样的东西:

enter image description here

注意:如果您将progressProperty的边界更新为0到0.25,则绑定甚至更简单:

Slider slider1 = new Slider(0d, 1d, 0d);
Slider slider2 = new Slider(0d, 1d, 0d);
Slider slider3 = new Slider(0d, 1d, 0d);
Slider slider4 = new Slider(0d, 1d, 0d);

ProgressIndicator pi = new ProgressIndicator();

pi.progressProperty().bind(slider1.valueProperty().divide(4d).add(slider2.valueProperty().divide(4d))
        .add(slider3.valueProperty().divide(4d)).add(slider4.valueProperty().divide(4d)));

VBox vbox = new VBox();
vbox.getChildren().addAll(slider1, slider2, slider3, slider4, pi);