【问题标题】:How to delete all components in a JPanel dynamically如何动态删除 JPanel 中的所有组件
【发布时间】:2016-11-15 21:49:37
【问题描述】:

要求是我有 2 个面板,即。面板 1,面板 2。 Panel1 将有 2 个按钮,当我单击任何按钮时,Panel 应动态显示特定于 Panel1 上该按钮的组件。

public class ListenerForRadioButton implements ActionListener{

JButton browseGlobal;
JFrame ParentFrame = new JFrame("Bla-Bla");
JPanel ChildPanel2 = new JPanel();
JButton upload ;

public ListenerForRadioButton(JFrame JFrameConstructor, JPanel JPanelConstructor, JButton uploadConstructor ){
    this.ParentFrame = JFrameConstructor;
    this.ChildPanel2 = JPanelConstructor;
    this.upload = uploadConstructor;
}

public void actionPerformed(ActionEvent event){

    //ChildPanel2.remove(upload);
    ChildPanel2.remove(upload);
    System.out.println("My listener is called");

}//方法结束 }//课程结束

公共类 Create_JFrame 扩展 JFrame{

public Create_JFrame(){

     //Create a Frame
     JFrame ParentFrame = new JFrame("Bla-Bla");
     JPanel ChildPanel1 = new JPanel();
     JPanel ChildPanel2 = new JPanel();
     JButton Option1 = new JButton("Option1");
     JButton browse = new JButton("Browse");
     JButton upload = new JButton("Upload");

     //Layout management
     ParentFrame.getContentPane().add(BorderLayout.WEST, ChildPanel1);
     ParentFrame.getContentPane().add(BorderLayout.EAST, ChildPanel2);


     //Create a button
     browse.addActionListener(new ListenerForRadioButton(ParentFrame,ChildPanel2,upload)); //Registering my listener

     ChildPanel2.add(browse);
     ChildPanel2.add(upload);
     ChildPanel1.add(Option1);


     //Make the frame visible
     ParentFrame.setSize(500, 300);
     ParentFrame.setVisible(true);
    }//end of Main
}//end of Class

【问题讨论】:

  • 几乎任何以“删除所有组件”开头的问题陈述都可以使用CardLayout 更好地解决,如this answer 所示。

标签: java swing


【解决方案1】:

使用removeAll(),您可以从Container 中删除所有组件。

ChildPanel2.removeAll();
ChildPanel2.revalidate();
ChildPanel2.repaint();

【讨论】:

    【解决方案2】:

    获取组件并删除它们

    Component[] components = ChildPanel2.getComponents();
    
    for (Component component : components) {
        ChildPanel2.remove(component);  
    }
    
    ChildPanel2.revalidate();
    ChildPanel2.repaint();
    

    注意:如果您不想删除所有组件,只需在remove 之前插入一个条件,检查组件是否是候选死亡。

    来源:123

    【讨论】:

      猜你喜欢
      • 2012-02-28
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 2022-08-14
      • 2013-10-19
      相关资源
      最近更新 更多