如何替换作为框架面板之一的JPanel内部的单个组件

问题描述

我正在使用IntelliJ,并且我有一个装满所有JPanel容器的组件的表单。按下按钮时,我只想更改单个面板的单个组件。我试图删除该面板的所有组件,并添加所需的内容,但没有结果。

确切地说,我希望JLabel成为JTextField

如何做到这一点而无需再次绘制GUI并仅更改该组件?

解决方法

您应该使用jframe.remove(Component comp)方法,而不要使用jframe.add(Component comp)。最后,不要忘了jframe.revalidate()方法来更新JFrame。 例如:

JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JLabel l = new JLabel("hello");
        f.add(l);
        f.pack();
        f.setVisible(true);
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        JTextField tf = new JTextField();
        f.remove(l);
        f.add(tf);
        f.revalidate();

3秒后,JLabel中的JFrame将被JTextField取代。