如何刷新JPanel?

时间:2014-07-02 08:36:51

标签: java swing jpanel refresh

我想在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++;
    }

1 个答案:

答案 0 :(得分:2)

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

其次,尝试设计一个不需要这样做的解决方案,但保留一个可以通过设置器和getter更新的视图。

如果您真的在改变观看次数(向用户展示完全不同的内容),请考虑使用CardLayoutJTabbedPane代替