вычисление индикатора выполнения jslider в java

#java

#java

Вопрос:

здравствуйте, я разрабатываю простой аудиоплеер 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();
  

Комментарии:

1. Зачем использовать a JSlider для имитации a JProgressBar ? Добавьте MouseListener к индикатору выполнения, и пользователь сможет легко изменить положение дорожки, если это необходимо.

2. привет! Я тоже пытаюсь создать медиаплеер

Ответ №1:

Прежде всего, я бы не стал вести percent такой счетчик. Я предлагаю вам пересчитать значение ползунка на основе начальной отметки времени и текущей отметки времени.

Если ваше максимальное значение для ползунка равно 100 и duration представляет продолжительность (в миллисекундах) аудиоклипа, вы должны быть в состоянии выполнить

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

Ответ №2:

Я бы рекомендовал установить максимальное значение ползунка равным длительности трека в секундах, потому что это не только упрощает вычисление (все, что вам нужно сделать, это установить положение ползунка на текущую длительность, а не вычислять процент), но вы получаете точный контроль над временной позицией при чтении и изменении положения ползунка. Например, дорожка длиной в минуту будет иметь ползунок с 60 вырезами. Вы также избежите ошибок округления.

Ответ №3:

Предполагая, что значения вашего слайдера варьируются от 0 до 600, не должно ли значение быть 600*percent ?

И не следует ли вычислять процент elapsedTime/duration , например 60/300 , для первой минуты 5-минутной песни?