【发布时间】:2017-07-11 15:38:51
【问题描述】:
我有一个音乐播放器,其 ProgressBar 的最大值为 mediaPlayer.getTotalDuration().toSeconds()
最近我一直在尝试创建一个MouseListener 来寻找mediaPlayer 到当ProgressBar 在某个位置被点击时返回的X 值。
问题:我点击ProgressBar,它似乎正在接收毫秒,所以我将它乘以 1000,以便它寻求相应的秒数。
这对某些音乐/mp3 准确有效,但对于较短或较长的音乐/mp3,ProgressBar 仅跳转到最近的可能位置,或跳转到其他位置,由于 * 1000 计算完全不准确X 值。 (下面我尝试了某人的建议,以将 X 值计算为秒,我还尝试设置 ProgressBar 值并将该值设置为 mediaPlayer 所在的位置。)
“int point”是我收到 X 值的地方。
代码:
progressBar.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent mouseClick) {
try{
progressBar.setMaximum((int)mediaPlayer.getTotalDuration().toSeconds());
int point = (int)Math.round(((double)mouseClick.getX() / (double)progressBar.getWidth()) * progressBar.getMaximum()); // previously tried "* 1000".
Duration pointDuration = new Duration(point);
mediaPlayer.seek(pointDuration);
} catch (Exception e7){
//
}
}
});
(不幸的是,计算更糟糕。)
我应该使用什么样的计算来正确寻找点击的位置?
【问题讨论】:
-
Slider可能是比 ProgressBar 更好的解决方案。如果您愿意,您可以使用 CSS 来设置滑块的样式,使其看起来像 ProgressBar 或至少与其默认外观不同。有关如何使用 Slider 执行此操作的信息,请参阅 Oracle Introduction to JavaFX Media 教程。
标签: java progress-bar media-player