JAVA SWING中如何清除JPanel中的组件?

2025-02-25 00:28:36
推荐回答(1个)
回答1:

  你可以调用JPanel的remove方法,然后用add添加组件,最后更新重画就可以了。
  一般想要移除和添加一个组件,可能是希望程序在运行时动态的移除和添加,所以你可以为要移除的组件设置一个监听器。
  例如单击某一个组件就移除这个组件,并且添加另外的组件。例如,当单击按钮时,把按钮移除,添加一个文本框。下面是一个具体的例子:
  package konw.win;
  import java.awt.FlowLayout;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.JPanel;
  import javax.swing.JTextField;
  public class WinTest3
  {
  public static void main(String[] args)
  {
  
  JFrame frame = new JFrame();
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
  frame.setLayout(new FlowLayout());
  JPanel panel = new JPanel();
  JButton button = new JButton("change");
  panel.add(button);
  JTextField f = new JTextField(20);
  ActionListener listener = new ChangeListener(button,panel,f);
  button.addActionListener(listener);//注册监听器
  frame.add(panel);
  frame.setVisible(true);
  
  }
  }
  /*监听器,当单击按钮时,移除button按钮,加入text文本框*/
  class ChangeListener implements ActionListener
  {
  JButton button;
  JPanel panel;
  JTextField text;
  public ChangeListener(JButton button, JPanel panel, JTextField text)
  {
  super();
  this.button = button;
  this.panel = panel;
  this.text = text;
  }

  @Override
  public void actionPerformed(ActionEvent e)
  {
  if("change".equals(e.getActionCommand()))
  {
  panel.remove(button);
  panel.add(text);
  panel.updateUI();
  panel.repaint();
  }
  }

  }
  需要特别注意的是移除和添加组件之后,记得重画组件。