我想在Swing中做一个动态表单。当我首先调用dataShow
方法时,它会创建GUI。但是当我再次调用它时,它会保留旧面板并在后台显示新内容。
当我尝试删除当前面板,然后添加新面板。 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++;
}
答案 0 :(得分:2)
首先,尝试调用frame.getContentPane().removeAll()
删除以前添加到其中的所有内容。显然,在添加新内容之前,请执行此操作。
其次,尝试设计一个不需要这样做的解决方案,但保留一个可以通过设置器和getter更新的视图。
如果您真的在改变观看次数(向用户展示完全不同的内容),请考虑使用CardLayout
或JTabbedPane
代替