2014-07-02 129 views
0

我想在Swing中做一個動態表單。當我首先調用dataShow方法時,它會創建GUI。但是當我再次調用它時,它會保留舊面板並在後臺顯示新的面板。如何刷新JPanel?

而當我嘗試刪除當前面板,然後添加新的。 GUI變空了

A Thread監聽事件(在這種情況下是int id)。

這裏是我的代碼以顯示動態表單:

public void showData(int id) throws DAOException, ClassNotFoundException{ 

     FormDAOImpl form = new FormDAOImpl(); 
     String b = form.importTagPoint(id); 
     //if(compteur%2 == 0) {System.out.println("Compteur : " +compteur); scrollPane.remove(panel); 
     //frame.getContentPane().remove(scrollPane); 
     //} 
     panel = new JPanel(new MigLayout()); 

     if(b == null) b = ""; 
     String[] bits = b.split("\\,"); 
     String delims = "[=]"; 
     while(i<bits.length){ 
      textField = new JTextField(); 
      String[] bitsS = bits[i].split(delims); 
      textField.setText(bitsS[1]); 

      JLabel label = new JLabel(bitsS[0]+ " : "); 
      panel.add(label); 
      panel.add(textField, "span, grow, alignx center, flowx"); 
      i++; 
     } 

     JButton annuler = new JButton("Annuler"); 
     JButton enregistrer = new JButton("Enregistrer"); 

     panel.add(annuler); 
     panel.add(enregistrer); 
     panel.revalidate(); 
     panel.repaint(); 

     scrollPane = new JScrollPane(panel); 
     scrollPane.revalidate(); 
     scrollPane.repaint(); 

     frame.getContentPane().add(scrollPane); 
     //frame.repaint(); 
     frame.invalidate(); 
     frame.validate(); 
     frame.repaint(); 

     frame.pack(); 
     frame.setMaximumSize(new Dimension(300, 800)); 

     compteur++; 
    } 

回答

2

首先,嘗試調用frame.getContentPane().removeAll()刪除以前添加到任何東西。在添加新的東西之前,顯然要這樣做。

其次,嘗試並設計一個解決方案,您不需要這樣做,但保持單個視圖,如果可能,可以通過setter和getters更新。

如果你是從字面上更改視圖(向用戶顯示的東西完全不同),可以考慮使用CardLayoutJTabbedPane代替

+0

+1「CardLayout或JTabbedPane中」我認爲這將是更好的選擇 –

+0

正如我所說的,在添加任何新東西之前,我嘗試了frame.getContentPane()。removeAll(),但在第二次調用之後,gui變空了。 – willyRG

+0

好吧,我會嘗試CardLayout和JTabbedPane。謝謝 – willyRG