У меня есть JProgressBar
, который я установил максимальное значение 150. С javax.swing.Timer
, я обновляю прогресс бар и увеличить переменную time
на 1. Вопрос заключается в том, что когда-то time
достигает 100, индикатор прогресса не будет обновляться больше и остается в положении, показанном ниже:JProgressBar не заполнит весь путь
Почему это происходит? Есть ли способ исправить проблему?
public class Test {
int time = 0, duration = 150;
JProgressBar progressBar;
Timer timer;
public Test() {
GridBagLayout layout = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
JFrame frame = new JFrame();
frame.setLayout(layout);
constraints.gridwidth = GridBagConstraints.REMAINDER;
timer = new Timer(98, new ActionListener() {
public void actionPerformed(ActionEvent ev) {
time++;
if (time == duration) {
time = 0;
timer.stop();
}
}
});
timer.start();
progressBar = new JProgressBar(0,duration);
progressBar.setValue(0);
progressBar.setStringPainted(false);
layout.setConstraints(progressBar,constraints);
frame.add(progressBar);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
ProgressBarUpdater pbUpdater = new ProgressBarUpdater();
pbUpdater.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent ev) {
progressBar.setValue(time);
}
});
pbUpdater.execute();
}
public static void main(String[] args) {
new Test();
}
public class ProgressBarUpdater extends SwingWorker<Void,Void> {
@Override
public Void doInBackground() {
setProgress(0);
while (time <= duration)
setProgress(Math.min(time,duration));
return null;
}
}
}
, что таймер вы используете, и что означает 98? Может быть, что действие должно быть вызвано только 98 раз? Класс 'java.util.Timer' не имеет такого конструктора, как вы использовали, и какой класс вы использовали? – cello
@cello 'javax.swing.Timer', который имеет конструктор, который принимает параметр' int', определяющий задержку в миллисекундах, и параграф 'ActionListener'. – TNT
Ох, забыл об этом. спасибо! – cello