问题描述
我正在使用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
取代。