【发布时间】:2022-07-04 21:01:21
【问题描述】:
我想通过媒体播放器播放来更新进度条。但是,在开始播放我的进度条后,在一秒钟内填充 100%,而媒体为 15 秒 - 5 分钟。查不出原因。
我的代码如下:
public static ProgressBar progress = new ProgressBar();
ObjectBinding<TimeElapsed> elapsedBinding =createElapsedBindingByBindingsAPI(player);
DoubleBinding elapsedDoubleBinding =createDoubleBindingByBindingsAPI(elapsedBinding);
progress.progressProperty().bind(elapsedDoubleBinding);
方法是:
public static @NotNull ObjectBinding<TimeElapsed> createElapsedBindingByBindingsAPI(
final @NotNull MediaPlayer player
) {
return Bindings.createObjectBinding(
new Callable<TimeElapsed>() {
@Override
public TimeElapsed call() throws Exception {
return new TimeElapsed(player.getCurrentTime());
}
},
player.currentTimeProperty()
);
}
public static @NotNull DoubleBinding createDoubleBindingByBindingsAPI(
final ObjectBinding<TimeElapsed> elapsedBinding
) {
return Bindings.createDoubleBinding(
new Callable<Double>() {
@Override
public Double call() throws Exception {
return elapsedBinding.getValue().getElapsed();
}
},
elapsedBinding
);
}
还有 TimeElapsed 类:
static class TimeElapsed {
private final double elapsed;
TimeElapsed(@NotNull Duration duration) {
elapsed = duration.toSeconds();
}
public double getElapsed() {
return elapsed;
}
}
那么,1) 使用 Playing 更新 progressBar,以及 2) 通过单击或拖动进度条来查找歌曲的代码更改是什么?
【问题讨论】:
-
进度必须介于 0 和 1 之间,因此您需要经过的秒数除以媒体播放器的总秒数
-
不要使用静态范围
-
@James_D,我试过了,但是每首歌曲的长度返回值都是一样的,并且该值不像歌曲长度那么合适,这意味着没有提供或允许实际长度值。
标签: macos javafx binding apple-m1