В настоящее время я работаю над небольшим MP3-плеером с Java Swing. Я хочу реализовать индикатор выполнения, который позволяет пользователю переходить к случайной позиции. Я подумал, что использование JSlider может быть лучшим вариантом.
Теперь проблема в том, что я использую Swing Timer для обновления индикатора выполнения каждые 200 м. Таким образом, событие изменения ползунка срабатывает каждый раз. Есть ли способ отфильтровать вызовы событий, которые не были вызваны пользователем?
В настоящее время я пытаюсь использовать setValueIsAdjusting(true) в таймере, но это кажется очень непоследовательным...
Timer progressTimer = new Timer(200, e -> {
updateProgress(player.getPosition());
});
progressTimer.start();
progressSlider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
if (progressSlider.getValueIsAdjusting()) {
return;
}
System.out.println("Skipping to "+progressSlider.getValue());
player.skipTo(progressSlider.getValue());
}
});
System.out иногда печатает позицию, на которую щелкнул пользователь, иногда позицию, которую ползунок обновил с помощью таймера. Любая помощь?