如何添加进度条?

我一直在努力了解如何添加进度条,我可以在我正在实现的GUI中创建一个进度条并让它出现,但即使在通过http://docs.oracle.com/javase/tutorial/uiswing/components查看之后/progress.html我仍然不清楚如何将方法设置为任务,以便我可以创建一个进度条来运行方法。 请有人尝试向我解释这个问题,或者发布一个在GUI中使用的进度条的示例,其中任务被设置为方法。 谢谢。

也许我可以通过一些示例代码帮助您:

 public class SwingProgressBarExample extends JPanel { JProgressBar pbar; static final int MY_MINIMUM = 0; static final int MY_MAXIMUM = 100; public SwingProgressBarExample() { // initialize Progress Bar pbar = new JProgressBar(); pbar.setMinimum(MY_MINIMUM); pbar.setMaximum(MY_MAXIMUM); // add to JPanel add(pbar); } public void updateBar(int newValue) { pbar.setValue(newValue); } public static void main(String args[]) { final SwingProgressBarExample it = new SwingProgressBarExample(); JFrame frame = new JFrame("Progress Bar Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setContentPane(it); frame.pack(); frame.setVisible(true); // run a loop to demonstrate raising for (int i = MY_MINIMUM; i <= MY_MAXIMUM; i++) { final int percent = i; try { SwingUtilities.invokeLater(new Runnable() { public void run() { it.updateBar(percent); } }); java.lang.Thread.sleep(100); } catch (InterruptedException e) { ; } } } } 

你的问题有点模糊,但听起来像你希望进度条显示特定运行方法的进度,我将其称为“work()”方法。 不幸的是,没有办法只将方法的引用传递给进度条 – 您的方法需要明确告诉进度条要显示的内容。 这就是我要做的事情:

  1. 使进度条的引用可用于work() – 将其作为参数传递给work(),或者提供一个访问器方法,使work()中的代码可以调用以获取对进度条的引用。

  2. 在work()之后,在获得对进度条的引用(我将其称为“pb”)之后,调用pb.setMinimum(0)和pb.setMaximum(n),其中n是您的方法具有的步数通过,渡过。

  3. 当您的方法完成每个步骤时,请调用pb.setValue(pb.getValue()+ 1);

  4. 在方法结束时,调用pb.setValue(0); 在返回之前重置进度条。

此外,如果您希望进度条显示String消息,则首先必须调用pb.setStringPainted(true),然后对进度条显示后续对pb.setString(string)的调用。

请参阅我在另一个SO问题上的答案,其中包括使用SwingWorker更新的JProgressBar示例。 SwingWorker用于在后台执行长时间运行的任务(例如,它只是常规的Thread.sleep )并以特定间隔报告进度。

我还强烈建议您查看Swing并发教程 ,了解有关在执行干扰UI的长时间运行任务时应该使用SwingWorker更多背景信息。

关于JProgressBar的Swing教程中提供了与我发布的类似的示例,它也值得一看