#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
для имитации aJProgressBar
? Добавьте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-минутной песни?