我一直在努力了解如何添加进度条,我可以在我正在实现的GUI中创建一个进度条,但是即使在通过http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html检查后,我仍然不清楚我是怎么做的将方法设置为任务,以便我可以创建用于运行方法的进度条。请有人尝试向我解释这个问题,或者发布一个在GUI中使用的进度条示例,并将任务设置为方法。感谢。
答案 0 :(得分:14)
也许我可以通过一些示例代码帮助您:
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) {
;
}
}
}
}
答案 1 :(得分:5)
你的问题有点模糊,但听起来我觉得你希望进度条显示特定运行方法的进度,我将其称为&#34; work()&#34;方法。遗憾的是,没有办法只将方法的引用传递给进度条 - 您的方法需要明确告诉进度条要显示的内容。这就是我要做的事情:
使进度条的引用可用于work() - 将其作为参数传递给work(),或者提供一个访问器方法,使您的work()中的代码可以调用以获取参考进度条。
内部工作(),在您获得对进度条的引用后(我将调用&#34; pb&#34;,调用pb.setMinimum(0)和pb .setMaximum(n)其中n是您的方法必须通过的步数。
当您的方法完成每个步骤时,请调用pb.setValue(pb.getValue()+ 1);
在方法结束时,调用pb.setValue(0);在返回之前重置进度条。
此外,如果您希望进度条显示String消息,则首先必须调用pb.setStringPainted(true),然后对进度条显示后续对pb.setString(string)的调用。
答案 2 :(得分:2)
请参阅my answer on another SO question,其中包含使用JProgressBar
进行更新的SwingWorker
示例。 SwingWorker
用于在后台执行长时间运行的任务(如果是示例,则只是常规Thread.sleep
)并以特定间隔报告进度。
我还强烈建议您查看Swing concurrency tutorial以获取有关在执行干扰用户界面的长时间运行任务时应使用SwingWorker
的原因的更多背景信息。
Swing tutorial about JProgressBar
s提供了与我发布的相似的示例,值得一看
答案 3 :(得分:0)
这个怎么样,
JFrame-> JButton(BorderLayout.NORTH)
JFrame-> JPanel-> JProgressBar(BorderLayout.SOUTH)
您可以在任意位置添加按钮部分,例如Progress progress = ...; state=true; progress.waitFor(); state=false;
private static void daa() {
//Frame
JFrame frame = new JFrame("Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
frame.setSize(frame.getWidth() + 55, frame.getHeight() + 55);
//Button
JButton jButton = new JButton("State");
frame.add(jButton, BorderLayout.NORTH);
//Progress Bar
JProgressBar progressBar = new JProgressBar();
progressBar.setIndeterminate(true);
//Text for progress bar
JPanel panel = new JPanel(new BorderLayout());
panel.add(progressBar);
panel.add(new JLabel("Please wait......."), BorderLayout.PAGE_START);
//linking
panel.add(progressBar);
frame.add(panel, BorderLayout.SOUTH);
boolean[] state = {false};
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
state[0] = !state[0];
state();
}
private void state() {
if (state[0] == true) {
panel.hide();
} else {
panel.show();
}
}
});
}