[英]JavaFX ChangeListener duration issue
我是Java的新手,仔细研究了文档之后,发现自己陷入了困境。
我有一个使用JavaFX MediaPlayer播放wav文件的小程序。 我的播放器对象有一个currentTimeProperty,我想在播放过程中以分钟:秒显示此属性的输出。
因此,在函数的结尾处有这个文件,该文件可以放入我的wav文件并初始化播放器:
mediaPlayer = new MediaPlayer(wav);
mediaPlayer.currentTimeProperty().addListener(new TimeListener());
然后我有:
public class TimeListener implements ChangeListener {
public void changed(ObservableValue o, Object oldVal, Object newVal) {
//Update time display with MediaPlayer's current time:
currTimeLabel.setText(newVal.toString());
}
}
这可行。 在播放wav的过程中,我的currTimeLabel
以当前时间更新,以毫秒为单位。 问题是,我希望这次以分钟:秒为单位。
变量newVal
被列为“ Duration”类型, Duration类具有toMinutes()
和toSeconds()
类的方法,但是我无法将它们应用于newVal
,我也不明白为什么。
我可以创建一个新的Duration对象:
Duration testDuration = Duration.millis(100000);
然后使用以下方法:
double secondsDuration = testDuration.toSeconds();
// 100.0
因此,如果testDuration
和newVal
都是持续时间对象,为什么我不能将这些方法应用于newval
?
总的来说,我走对了吗? 我知道必须有一些字符串格式才能使输出正确,但是在我看来,首先我需要以非字符串格式从newVal获取值。
提前致谢。
这是因为您的newVal是一个Object而不是Duration。 您可以像((Duration)newVal).
一样对其进行铸造和取消引用((Duration)newVal).
另一个更好的方法是使您的方法ChangeListener<Duration>
TimeListener = new ChangeListener<Duration>() {
@Override public void changed(ObservableValue<? extends Duration> o, Duration oldVal, Duration newVal) {
//now newVal is of Duration class
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.