gpt4 book ai didi

java - 如何刷新 JPanel?

转载 作者:行者123 更新时间:2023-12-02 05:40:51 29 4
gpt4 key购买 nike

我想在 Swing 中制作动态表单。当我第一次调用 dataShow 方法时,它会创建 GUI。但是当我再次调用它时,它会保留旧面板并在后台显示新面板。

当我尝试删除当前面板,然后添加新面板时。 GUI 变成空的

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++;
}

最佳答案

首先,尝试调用frame.getContentPane().removeAll()来删除之前添加到其中的任何内容。显然,在向其中添加任何新内容之前,请先执行此操作。

其次,尝试设计一个解决方案,您不需要这样做,但维护一个 View ,如果可能的话,可以通过 setter 和 getter 进行更新。

如果您确实要更改 View (向用户展示完全不同的东西),请考虑使用 CardLayoutJTabbedPane相反

关于java - 如何刷新 JPanel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24526522/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com