这是供您查看的一些基础,如果您可以学习它并理解为什么其中每个代码段都存在,那么我认为它将有所帮助。随时在评论中提问(尽管我现在要睡觉了!)
例:
public class ProgressBarDemo extends Jframe { private final JProgressBar progressBar = new JProgressBar(0, 100); private int progressCounter = 0; public ProgressBarDemo() { setContentPane(progressBar); setPreferredSize(new Dimension(100, 100)); setDefaultCloseOperation(EXIT_ON_CLOSE); pack(); new Thread(new Runnable() { public void run() { while (progressCounter <= 100) { SwingUtilities.invokeLater(new Runnable() { public void run() { progressBar.setValue(progressCounter++); } }); try { Thread.sleep(500); } catch (InterruptedException e) {} } } }).start(); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new ProgressBarDemo().setVisible(true); } }); }}解决问题的两种不同方法,而使用SwingWorker:
SwingWorker示例1:
.... public ProgressBarDemo() { setContentPane(progressBar); setPreferredSize(new Dimension(100, 100)); setDefaultCloseOperation(EXIT_ON_CLOSE); pack(); SwingWorker<Integer, Void> worker = new SwingWorker<Integer,Void>() { public Integer doInBackground() { while (progressCounter <= 100) { setProgress(progressCounter++); try { Thread.sleep(500); } catch (InterruptedException e) {} } return 0; } }; worker.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { if ("progress".equals(event.getPropertyName())) { progressBar.setValue((Integer)event.getNewValue()); } } }); worker.execute(); } ....SwingWorker示例2(虽然不太好,但是很有趣):
.... public ProgressBarDemo() { setContentPane(progressBar); setPreferredSize(new Dimension(100, 100)); setDefaultCloseOperation(EXIT_ON_CLOSE); pack(); new SwingWorker<Integer,Integer>() { public Integer doInBackground() { while (progressCounter <= 100) { publish(progressCounter++); try { Thread.sleep(500); } catch (InterruptedException e) {} } return 0; } public void process(List<Integer> progresses) { Integer maxProgress = null; for (int progress : progresses) { if (maxProgress == null || progress > maxProgress) { maxProgress = progress; } } progressBar.setValue(maxProgress); } }.execute(); } ....


