2015-04-20 51 views
2

相關的代碼:如何在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的新手。

如何讓程序執行我期望的功能?

+3

使用'SwingWorker' ......好吧,但一旦'run'方法到達終點,你需要將'dialog'一個參考,所以你可以調用'處置'對此... – MadProgrammer

+0

@MadProgrammer,謝謝。 「對話框」在「任務」中可見。所以我可以直接使用它。但是有一個小問題。查看@ Kuba的回答下的評論 –

+0

僅僅因爲對話框是可見的,並不意味着你可以與它交互,你仍然需要對它進行某種引用。至於你「其他」的問題,請考慮使用SwingWorker代替 – MadProgrammer

回答

2

如何:

public void run() { 
      if(j == 100) 
       dialog.dispose(); 
      else 
       progress.setValue(j); 
     } 
+0

這個技巧!謝謝!但是有一個小問題。當我按下JButton時,JProgressBar不會移動。它保持在0%。這種情況有時只發生。一旦這沒有發生,那麼這個問題就不會出現。任何想法是什麼造成這個? –