如何在 JavaFX 中使用双重绑定更新进度条?
How do I Update a Progress bar Using Double Binding in JavaFX?
我有一个 List
任务,它们都更新一个名为 totalProgress
的公共进度条。此条针对每个任务单独更新。我已经尝试创建一个 DoubleBinding
对象,以便能够根据每个任务的平均进度更新进度条,但它不起作用。
参考post:Multiple Tasks JavaFX
这是我尝试使用的代码:
double p = 0.0;
for (final Task t : tasks) {
threadPool.submit(t);
DoubleBinding totalProgress = Bindings.createDoubleBinding(new Callable<Double>() {
@Override
public Double call() {
p = (p+t.getProgress()) / tasks.size();
System.out.println("P"+p + "Progress"+t.getProgress());
return p;
}
});
bar.progressProperty().bind(totalProgress);
//bar.progressProperty().bind(t.progressProperty());
t.setOnSucceeded(handler);
}
threadPool.shutdown();
按照您链接的示例中的相同方式执行此操作:
Observable[] progressProps = new Observable[tasks.size()];
for (int i = 0 ; i < tasks.size(); i++) {
progressProps[i]=tasks.get(i).progressProperty();
}
DoubleBinding totalProgress = Bindings.createDoubleBinding(new Callable<Double>() {
@Override
public Double call() {
double total = 0 ;
for (Task task : tasks) {
total = total + task.getProgress();
}
return total / tasks.size();
}
}, progressProps);
bar.progressProperty().bind(totalProgress);
for (final Task t : tasks) {
threadPool.submit(t);
t.setOnSucceeded(handler);
}
我有一个 List
任务,它们都更新一个名为 totalProgress
的公共进度条。此条针对每个任务单独更新。我已经尝试创建一个 DoubleBinding
对象,以便能够根据每个任务的平均进度更新进度条,但它不起作用。
参考post:Multiple Tasks JavaFX
这是我尝试使用的代码:
double p = 0.0;
for (final Task t : tasks) {
threadPool.submit(t);
DoubleBinding totalProgress = Bindings.createDoubleBinding(new Callable<Double>() {
@Override
public Double call() {
p = (p+t.getProgress()) / tasks.size();
System.out.println("P"+p + "Progress"+t.getProgress());
return p;
}
});
bar.progressProperty().bind(totalProgress);
//bar.progressProperty().bind(t.progressProperty());
t.setOnSucceeded(handler);
}
threadPool.shutdown();
按照您链接的示例中的相同方式执行此操作:
Observable[] progressProps = new Observable[tasks.size()];
for (int i = 0 ; i < tasks.size(); i++) {
progressProps[i]=tasks.get(i).progressProperty();
}
DoubleBinding totalProgress = Bindings.createDoubleBinding(new Callable<Double>() {
@Override
public Double call() {
double total = 0 ;
for (Task task : tasks) {
total = total + task.getProgress();
}
return total / tasks.size();
}
}, progressProps);
bar.progressProperty().bind(totalProgress);
for (final Task t : tasks) {
threadPool.submit(t);
t.setOnSucceeded(handler);
}