JavaFX 进度条/进度指示器 : listen for change from multiple Sliders

标签 java javafx data-binding progress-bar

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

有更好的方法吗?

这是我的代码:

@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

最佳答案

您可以简单地将 ProgressIndicatorprogressProperty 绑定(bind)到 SlidervalueProperty,同时保持请注意,指标的 progressProperty 的边界为 0 到 1:

A positive value between 0 and 1 indicates the percentage of progress where 0 is 0% and 1 is 100%.

示例:

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);

这会产生这样的结果:

enter image description here

注意:如果将 Slider 的边界更新为 0 到 0.25,则绑定(bind)会更加简单:

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

ProgressIndicator pi = new ProgressIndicator();

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

关于JavaFX 进度条/进度指示器 : listen for change from multiple Sliders,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40875551/

相关文章:

Scala 中的 JavaFX 2 和 setCellValueFactory()?

c# - 将 WPF DataGrid 控件数据绑定(bind)到 System.Data.DataTable 对象?

java - 如何从 Android 上的 https url 获取 xml?

Java、Realm、Tomcat、登录。

JavaFX LineChart - 更改已更改位置的图例的颜色

java - windows共享中的视频播放(JAVA)

data-binding - 使用 Polymer 根据输入值过滤表格

asp.net-mvc - 在 MVC ActionLink 中使用 Knockout 绑定(bind)

java - 如何在另一个类中使用可运行的jar?

java - 成对操作给定的 Java 流