我目前正在解决以下问题:如何在单击开始按钮时使用线程来填充进度条(一步一步)。 我没有遇到构建线程或进度条的问题。 然而,当我填写酒吧时,我继续如下:
public class event implements ActionListener{
@Override
public void actionPerformed(ActionEvent ae) {
Try t = new Try(250);
Thread MyT = new Thread(t);
MyT.start();
try {
MyT.sleep(500);
} catch (InterruptedException ex) {
Logger.getLogger(Gui.class.getName()).log(Level.SEVERE, null, ex);
}
pr.setValue(pr.getValue()+25);
System.out.println("check");
try {
MyT.sleep(5000);
} catch (InterruptedException ex) {
Logger.getLogger(Gui.class.getName()).log(Level.SEVERE, null, ex);
}
pr.setValue(pr.getValue()+25);
System.out.println("check");
}
}
这里的问题是我预计在500毫秒后,条形图将被填充25个单位,然后在5000毫秒后再次填充其他25个单元(一步一步)。相反,我的程序在500毫秒后不会用25填充条形图,但在5000毫秒后填充50条。为什么这样,如何在不修改线程类的情况下逐渐调整条形图?
答案 0 :(得分:0)
是的,我知道这个问题很旧,但是也许可以帮助某个人。
我实现了一个进度条类,该类提供了一种简单的方法,可以在指定的时间内将进度条填充为某个值。
像这样使用:
// create progress bar
ProgressBar progressbar = new ProgressBar();
// fill progress bar in steps each one second
progressbar.fillInMills(1000, 25);
progressbar.fillInMills(1000, 50);
progressbar.fillInMills(1000, 75);
progressbar.fillInMills(1000, 100);
// resets to zero
progressbar.reset();
import javax.swing.JProgressBar;
public class ProgressBar extends JProgressBar {
Thread thread;
final int MAX = 100;
final int MIN = 0;
public ProgressBar() {
super(HORIZONTAL);
setMinimum(MIN);
setMaximum(MAX);
}
/**
* Fills the progress bar to the specified level in the specified time.
*
* @param millis the time in milliseconds
* @param fillTo the level in percentage
*/
public void fillInMills(final int millis, final int fillTo) {
thread = new Thread(() -> {
try {
final int startAt = getValue();
final int timeBetweenSteps = millis / Math.max(fillTo - startAt, 1);
for (int i = startAt; i <= fillTo; i++) {
setValue(i);
Thread.sleep(timeBetweenSteps);
}
} catch (final InterruptedException ignored) {
// thread is cancelled
}
});
thread.start();
}
/**
* Resets the ProgressBars level to zero.
*/
public void reset() {
if (thread != null) {
thread.interrupt();
}
this.setValue(0);
}
}
如果您需要JProgressBar的高级功能,请参见此Oracle Tutorial on Progress Bars以获取详细信息。