我正在尝试为在 GUI 运行之前下载信息的应用程序编写进度条。因为下载和整理信息的过程很长,所以我想通知用户进度。我决定在游戏后期使用进度条,因此,编写了大部分代码,我正在尝试将进度条合并到代码中,而无需大量重新编写代码。以下是进度条的代码。目前,进度条在一切运行后出现,并弹出 GUI。
static class PopulatingCardsWorker extends SwingWorker<Void, Integer> {
JProgressBar jpb;
int max;
JLabel label;
public PopulatingCardsWorker(JProgressBar jpb, int maximum, JLabel label) {
this.jpb = jpb;
this.max = maximum;
this.label = label;
}
@Override
protected void process(List<Integer> chunks) {
int i = chunks.get(chunks.size()-1);
jpb.setValue(i); // The last value in this array is all we care about.
System.out.println(i);
label.setText("Loading " + i + " of " + max);
}
@Override
protected Void doInBackground() throws Exception {
for(int i = 0; i < max; i++) {
Thread.sleep(10); // Illustrating long-running code.
publish(i);
}
return null;
}
@Override
protected void done() {
try {
get();
JOptionPane.showMessageDialog(jpb.getParent(), "Success", "Success", JOptionPane.INFORMATION_MESSAGE);
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
}
}
}
private static void go(int max) {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JLabel label = new JLabel("Loading...");
JProgressBar jpb = new JProgressBar();
jpb.setIndeterminate(false);
jpb.setMaximum(max);
panel.add(label);
panel.add(jpb);
frame.add(panel);
frame.pack();
frame.setSize(200,90);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
new PopulatingCardsWorker(jpb, max, label).execute();
}
在“my_list=new CardDatabase();”的创建过程中创建了swing worker。在那个班级里,我有摇摆工人和摇摆工人应该监控的过程。
我目前在名为“populate_cards()”的方法中调用 swing worker,并使用以下代码创建了 swing worker。摇摆工人应该监控 populate_cards() 方法中发生的事情。Swing Worker 方法中的所有数据都只是暂时的,直到我更好地了解如何让它按照我想要的方式工作。
慕的地8271018
相关分类