2014-12-04 61 views
0

我寫了下面的代碼來生成請稍候JDialog而產生決策樹的,但它打開了,似乎是空白的JDialog盒子打開,但顯示爲空白

public JDialog pleasewait() 
{ 
    JDialog dialog = new JDialog(); 
    JLabel label = new JLabel("Please wait..."); 
    label.setIcon(new javax.swing.ImageIcon(getClass().getResource("/decision_tree_runner/load.gif"))); // NOI18N 
    dialog.setBackground(Color.BLACK); 
    dialog.setLocationRelativeTo(null); 
    dialog.setTitle("Please Wait..."); 
    dialog.add(label); 
    dialog.pack(); 

    return dialog; 

} 

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
    // TODO add your handling code here: 
    JDialog dialog = pleasewait(); 
    dialog.repaint(); 
    dialog.setVisible(true); 
    FypProject fyp_project = new FypProject(); 
    try {fyp_project.main_fypproject();} catch (SQLException ex) {} 
    dialog.setVisible(false); 

}        

回答

0

我認爲它必須做在對話框中添加JLabel。我們的佈局管理器的缺乏使得這很困難。

嘗試加入這個你添加的JLabel前:

dialog.setLayout(new GridLayout());

,並刪除:

dialog.pack();

+0

添加這已收縮對話框並沒有顯示出任何東西仍然 – 2014-12-04 19:06:21

+0

如果您從標籤中刪除圖像會發生什麼? – user489041 2014-12-04 19:09:24

+0

JDialog與所有Swing頂級容器一樣,默認情況下使用BorderLayout ... – MadProgrammer 2014-12-04 19:09:35

1

很可能fyp_project.main_fypproject()是一個長期運行/阻塞調用,調用時從事件派發線程的上下文中,將阻止它能夠處理新的事件,包括重新繪製請求。

考慮使用像一個SwingWorker,首先打開的對話框中,執行的工人時,它的done方法被調用,關閉對話框

看看Concurrency in SwingWorker Threads and SwingWorker更多細節

+0

謝謝它爲我工作 – 2014-12-04 19:54:06

+0

很高興幫助... – MadProgrammer 2014-12-04 20:03:37

0

我做以下步驟

  1. 創建單獨的形式用於FY PLEASEWAIT
  2. 創建的線程p_project.main_fypproject()
  3. 傳遞形式的對象線程類
  4. 在運行方法調用setVisible()PLEASEWAIT的選項設置爲false

    public class thread_for_pleasewait implements Runnable{ 
    Thread t ; 
    please_wait_form pwf; 
    decision_tree dt; 
    FypProject fyp_project = new FypProject(); 
    @Override 
    
    public void run() 
    { 
    String[] args = null; 
    try { 
        fyp_project.main_fypproject(); 
        pwf.setVisible(false); 
        dt.setVisible(true); 
    } catch (SQLException ex) { 
        Logger.getLogger(thread_for_pleasewait.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    } 
        public void start(please_wait_form pwf,decision_tree dt) 
        { 
        t = new Thread(this); 
        t.start(); 
        this.pwf=pwf; 
        this.dt=dt; 
        } 
    }