【问题标题】:How can I refresh the JPanel?如何刷新 JPanel?
【发布时间】:2014-08-22 23:21:10
【问题描述】:

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

【问题讨论】:

    标签: java swing jpanel refresh


    【解决方案1】:

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

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

    如果您实际上是在更改视图(向用户展示完全不同的东西),请考虑改用 CardLayoutJTabbedPane

    【讨论】:

    • +1 for "CardLayout or JTabbedPane" 我认为这会是更好的选择
    • 正如我所说,我在添加任何新内容之前尝试使用 frame.getContentPane().removeAll(),但在 le 第二次调用后 gui 变为空。
    • 好的,我会试试 CardLayout 和 JTabbedPane。谢谢
    • @user3645115 在您的原始帖子中没有提到frame.getContentPane().removeAll()...
    猜你喜欢
    • 2013-11-14
    • 2010-10-14
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 2012-06-22
    • 1970-01-01
    相关资源
    最近更新 更多