我在Mp3播放器中制作快进按钮。我已经为此编写了代码,但是如何实现计时器以向前跳5%有问题?我的意思是当我按下按钮计时器时应该向总长歌的5%跳跃。这是我的fastForward方法。
public void FastForward(){
try {
//songTotalLength = fis.available();
fis.skip((long) ((songTotalLength * 0.05)));
} catch (IOException e) {
e.printStackTrace();
}
}
这是按钮方法:
private void jButton3ActionPerformed(ActionEvent e) {
mp3.FastForward();
if(mp3.player.isComplete()){
bar = 100;
}
jProgressBar1.setValue((int)bar);
bar+=5;
}
这个是定时器:
private void setTime(float t) {
int mili = (int) (t / 1000);
int sec = (mili / 1000) % 60;
int min = (mili / 1000) / 60;
start.set(Calendar.MINUTE, 0);
start.set(Calendar.SECOND, 0);
end.set(Calendar.MINUTE, 0 + min);
end.set(Calendar.SECOND, 0 + sec);
timer = new javax.swing.Timer(1000, new TimerListener());
percent = (float)100/(min*60+sec);
}
答案 0 :(得分:0)
您已经在冗余地跟踪两个变量fis
和bar
的进度。为了良好的设计,使用其中一个来确定经过的时间,而不是使用另一个变量用于相同的目的。
但有问题如何实现计时器向前跳5%?
你好像误解了Timer的目的。根据{{3}},它:
按指定的时间间隔触发一个或多个ActionEvent。
因此计时器并不是要记录已经过了多长时间。它只需在您配置的情况下每秒调用一次actionPerformed(ActionEvent)
TimerListener
方法(每1000毫秒)。
要获得更完整的答案,请发布TimerListener
课程的代码。
备注强>
您的setTime(float)
方法似乎是重复调用的,因此此方法不应初始化timer
变量。而是将计时器初始化一次并完全放下它来完成它的工作。
我假设您打算使用提供的float
参数t
来代表Timer
class documentation。
float
数据类型只有7位精度。这可能没问题,因为你只对几分钟和几秒感兴趣,否则浮动只会在失去准确性之前长达四个月左右。
您似乎希望按钮点按处理程序执行此操作(尽快增加bar
):
private void jButton3ActionPerformed(ActionEvent e) {
mp3.FastForward();
bar+=5; // increment bar before checking complete, and before setting progress
if(mp3.player.isComplete()){
bar = 100;
}
jProgressBar1.setValue((int)bar);
}