如何添加进度栏?
我一直在试图了解如何添加一个进度条,我可以在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()”方法。不幸的是,没有办法只将方法的引用传递给进度条 - 你的方法需要明确地告诉进度条显示什么。这是我会做:
制作进度条的参考提供给工作() - 无论是把它作为一个参数对(),或提供一个访问方法,你在工作代码()可以调用获得对进度条的参考。在你获得对进度条(我将称之为“pb”)的引用后,调用pb.setMinimum(0)和pb.setMaximum(n),其中n是数字。的步骤你的方法具有打通
作为你的方法完成的每个步骤,呼叫pb.setValue(pb.getValue()+ 1);
在你的方法结束时,呼叫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 JProgressBar
s,它也值得一
一个答案在这[可以在主类之外的类中使用进度条吗?](http://stackoverflow.com/questions/4637215/can-a-progress-bar-be-used-in-a-class-outside-主)可能有所帮助。 – trashgod 2012-01-18 19:44:38
我不明白。为什么你想创建一个运行方法的进度条**(如你所说)?进度条的目标是向用户提供有关正在运行的任务的信息。所以在oracle doc中告诉的任务指的是将管理进度条的线程。因此,使用挥杆工具创建进度条(如链接所示),然后在(长?)任务中更新该进度条。 SwingWorker的'doInBackground()'方法用于管理进度条。我建议你再看一下你的oracle tuto,解释很清楚,例子可重用。祝你好运! – 2012-01-18 19:56:25