2011-05-06 56 views
2

hello 我正在开发一个简单的java音频播放器,我需要使用jslider作为进度条,而我在播放进度条之前使用它完成了歌曲完成之前我使用此代码在java中计算jslider进度条

Timer time = new Timer(100, new ActionListener() { 
       int percent = 0; 

      @Override 
      public void actionPerformed(ActionEvent e) { 
        percent++; 
        if (percent>100) 
          percent = 0; 

       jSlider1.setValue((int)(100*(percent/600.0*duration))); 
      } 
    }); 
    time.start(); 
+2

为什么使用'JSlider'来模拟'JProgressBar'?将“MouseListener”添加到进度条,用户可以根据需要轻松地重新定位轨道。 – 2011-05-06 15:08:53

+0

嘿!我也试图创造媒体播放器 – Surej 2011-05-09 14:36:57

回答

3

首先,我不会保持percent计数器这样。我建议您根据开始时间戳和重新计算滑块值,当前时间戳为

如果滑块的最大值为100 duration表示音频剪辑的持续时间(毫秒),你应该能够做到

long elapsed = System.currentTimeMillis() - startTimeStamp; 
double percent = elapsed/duration; 
jSlider1.setValue((int)(100*percent)); 
0

假设你的滑块值的范围从0到600,不应该是600*percent

而且不应该由百分比elapsedTime/duration来计算,例如,一首5分钟歌曲的第一分钟为60/300

1

我建议让滑块的最大值等于轨道的持续时间(以秒为单位),因为它不仅使计算更容易(您只需将滑块的位置设置为当前的持续时间比计算出一个百分比),但是在读取和修改滑块位置时,您可以对时间位置进行细化控制。例如,一分钟长的轨道将有一个带有60个凹口的滑块。你也会避免舍入错误。