Java 如何添加进度条?
我一直在试图理解如何添加进度条,我可以在我正在实现的GUI中创建一个进度条并使其显示出来,但即使在检查之后,我仍然不清楚如何将方法设置为任务,以便创建一个用于运行方法的进度条。请有人给我解释一下,或者发布一个在GUI中使用进度条并将任务设置为方法的示例。谢谢。您的问题有点模糊,但我觉得您希望进度条显示特定运行方法的进度,我称之为“work()”方法。不幸的是,无法将对方法的引用传递给进度条-方法需要显式地告诉进度条要显示什么。下面是我要做的:Java 如何添加进度条?,java,swing,user-interface,progress-bar,Java,Swing,User Interface,Progress Bar,我一直在试图理解如何添加进度条,我可以在我正在实现的GUI中创建一个进度条并使其显示出来,但即使在检查之后,我仍然不清楚如何将方法设置为任务,以便创建一个用于运行方法的进度条。请有人给我解释一下,或者发布一个在GUI中使用进度条并将任务设置为方法的示例。谢谢。您的问题有点模糊,但我觉得您希望进度条显示特定运行方法的进度,我称之为“work()”方法。不幸的是,无法将对方法的引用传递给进度条-方法需要显式地告诉进度条要显示什么。下面是我要做的: 使进度条的引用对work()可用-将其作为参数传递给
JProgressBar
示例,该示例通过使用SwingWorker
进行更新。SwingWorker
用于在后台执行长时间运行的任务(在本示例中,它只是一个常规线程。睡眠
)并定期报告进展情况
我还强烈建议您查看一下,以获取更多背景信息,了解在执行干扰UI的长时间运行任务时为什么要使用SwingWorker
中有一个与我发布的示例类似的示例,也值得一看也许我可以帮助您了解一些示例代码:
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) {
;
}
}
}
}
公共类SwingProgressBarExample扩展了JPanel{
JProgressBar-pbar;
静态最终int MY_最小值=0;
静态最终int MY_最大值=100;
公共SwingProgressBarExample(){
//初始化进度条
pbar=新的JProgressBar();
pbar.setMinimum(MY_最小值);
pbar.setMaximum(我的最大值);
//添加到JPanel
添加(pbar);
}
公共void updateBar(int newValue){
pbar.设定值(新值);
}
公共静态void main(字符串参数[]){
最终SwingProgressBarExample it=新SwingProgressBarExample();
JFrame=新JFrame(“进度条示例”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(it);
frame.pack();
frame.setVisible(true);
//运行一个循环来演示提升
对于(inti=MY_MINIMUM;i
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();
}
}
});
}
这个可能的副本中的一个答案可能会有所帮助。我不明白。为什么要创建一个进度条来运行方法(如您所说)?进度条的目的是向用户提供有关正在运行的任务的信息。因此,oracle文档中的任务指的是将管理进度条的线程。因此,使用swing worker(如链接中所述)创建进度条,然后在(长?)任务中更新进度条。doInBackground()
SwingWorker的方法用于管理进度条。我建议您再次查看您的oracle tuto,说明非常清楚,示例可重复使用。祝您好运!