相關的代碼:如何在JProgressBar達到100%時使JDialog不可見?
JProgressBar progress;
JButton button;
JDialog dialog; //Fields of my GUI class
progress=new JProgressBar(JProgressBar.HORIZONTAL,0,100);
button=new JButton("Done");
dialog=new JDialog(); //Done from methods
progress.setValue(0);
progress.setStringPainted(true);
progress.setBorderPainted(true); //Also done from methods
button.addActionListener(this); //Also done from methods
dialog.setLayout(new FlowLayout(FlowLayout.CENTER));
dialog.setTitle("Please wait...");
dialog.setBounds(475,150,250,100);
dialog.setModal(true); //Also done from methods
dialog.add(new JLabel("Loading..."));
dialog.add(progress); //Also done from methods
這裏是actionPerformed
方法:
public void actionPerformed(ActionEvent e)
{
dialog.setVisible(true);
Task task=new Task();
task.start();
//After the JProgressBar reaches 100%, do the following things:
/*progress.setValue(progress.getMinimum());
dialog.setVisible(false);*/
}
Task
是一個嵌套類略低於actionPerformed
方法:
private class Task extends Thread {
public void run(){
for(int i =0; i<= 100; i++){
final int j = i;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
progress.setValue(j);
}
});
try {
Thread.sleep(10);
} catch (InterruptedException e) {}
}
}
}
我想的JDialog在JProgressBar達到100%時不可見。目前,當JProgressBar達到100%時,JDialog不會關閉。實際上,我想要在JProgressBar達到100%後執行actionPerformed
中的註釋片段。
我試過task.join();
只是在task.start();
之後,但是這給了一個負面結果。當我這樣做時,顯示了JDialog的邊框,然後過了一會兒,對話框關閉。我從來沒有在JDialog中看到任何東西。
請注意,我是SwingUtilities
的新手。
如何讓程序執行我期望的功能?
使用'SwingWorker' ......好吧,但一旦'run'方法到達終點,你需要將'dialog'一個參考,所以你可以調用'處置'對此... – MadProgrammer
@MadProgrammer,謝謝。 「對話框」在「任務」中可見。所以我可以直接使用它。但是有一個小問題。查看@ Kuba的回答下的評論 –
僅僅因爲對話框是可見的,並不意味着你可以與它交互,你仍然需要對它進行某種引用。至於你「其他」的問題,請考慮使用SwingWorker代替 – MadProgrammer