如何添加进度栏?

问题描述:

我一直在试图了解如何添加一个进度条,我可以在GUI中创建一个我正在实现并使其显示,但即​​使通过http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html检查后,我仍然没有更清楚如何将方法设置为任务,以便我可以创建运行方法的进度条。请有人可以尝试向我解释这一点,或者发布GUI中使用的进度条示例,并将任务设置为方法。谢谢。如何添加进度栏?

+1

一个答案在这[可以在主类之外的类中使用进度条吗?](http://*.com/questions/4637215/can-a-progress-bar-be-used-in-a-class-outside-主)可能有所帮助。 – trashgod 2012-01-18 19:44:38

+0

我不明白。为什么你想创建一个运行方法的进度条**(如你所说)?进度条的目标是向用户提供有关正在运行的任务的信息。所以在oracle doc中告诉的任务指的是将管理进度条的线程。因此,使用挥杆工具创建进度条(如链接所示),然后在(长?)任务中更新该进度条。 SwingWorker的'doInBackground()'方法用于管理进度条。我建议你再看一下你的oracle tuto,解释很清楚,例子可重用。祝你好运! – 2012-01-18 19:56:25

也许我可以帮你一些示例代码,一个类似的例子:

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. 制作进度条的参考提供给工作() - 无论是把它作为一个参数对(),或提供一个访问方法,你在工作代码()可以调用获得对进度条的参考。在你获得对进度条(我将称之为“pb”)的引用后,调用pb.setMinimum(0)和pb.setMaximum(n),其中n是数字。的步骤你的方法具有打通

  2. 作为你的方法完成的每个步骤,呼叫pb.setValue(pb.getValue()+ 1);

  3. 在你的方法结束时,呼叫PB。 setValue(0);在返回之前重置进度条

此外,如果你想让你的进度条显示一条String消息,你首先必须调用pb.setStringPainted(true),随后调用pb.setString(string)将显示在进度条上。

请参阅my answer on another SO question其中包括JProgressBar的示例,该示例通过使用SwingWorker进行更新。 SwingWorker用于在后台执行长时间运行的任务(例如,它只是一个常规的Thread.sleep),并以特定的时间间隔报告进度。

我也强烈建议看看Swing concurrency tutorial以获得更多背景信息,说明为什么在执行干扰UI的长时间运行任务时应该使用SwingWorker

因为我张贴的一个可用的Swing tutorial about JProgressBars,它也值得一