在JFrame中用JPanel替换JPanel

| 我有一个扩展JFrame的类,并且它具有BorderLayout。它具有两个类型为JPanel的私有实例变量。它们代表按钮的面板,分别称为flipButton和confidenceButtons。当您单击按钮时,按钮面板被另一个按钮面板代替。也就是说,如果单击flipButton中的按钮,则flipButton将替换为confidenceButtons。我试图这样做:   私有类FlipListener实现ActionListener {     公共无效actionPerformed(ActionEvent e){       remove(flipButton);       添加(confidenceButtons,BorderLayout.SOUTH);       validate();       ...     }   }   私有类ColorListener实现ActionListener {     ...     公共无效actionPerformed(ActionEvent e){       ...       remove(confidenceButtons);       add(flipButton,BorderLayout.SOUTH);       validate();     }   } flipButton中的按钮具有FlipListeners,confidenceButtons中的按钮具有ColorListeners。程序运行时,单击按钮将删除面板,但是没有添加任何内容来替换它。我究竟做错了什么? 编辑 事实证明CardLayout是一种简单易用的解决方案。事实证明,以上代码确实有效;问题出在我代码的另一部分。 >。<但是,我一直很难使用这些方法,我发现CardLayout为我简化了它。谢谢。     
已邀请:
        使用CardLayout,如下所示。        
        revalidate()+ repaint()应该是技巧,此处为示例 编辑: 觉得自己有问题,这里和这里的例子,再加上一个垃圾箱的例子,随时可以再次基于代码构建问题 另一种方法是查看安德鲁·汤普森(Andrew Thompson)添加的出色示例:-) +1     
        尝试使用getContentPane()调用remove(),add()方法等:
getContentPane().remove(flipButton); 
getContentPane().add(confidenceButtons,BorderLayout.SOUTH);   
getContentPane().revalidate();
getContentPane().repaint();
编辑: 下面的代码对我有用:
import java.awt.BorderLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Frame extends JFrame {
JPanel flipButton =new JPanel();
JPanel confidenceButtons =new JPanel();



    public Frame() throws HeadlessException {
    super();
    this.setLayout(new BorderLayout());
    JButton b1=new JButton(\"flip\");
    b1.addActionListener(new FlipListener());
    flipButton.add(b1);

    JButton b2=new JButton(\"color\");
    b2.addActionListener(new ColorListener());
    confidenceButtons.add(b2);
    this.getContentPane().add(flipButton,BorderLayout.SOUTH);
    this.setSize(250,250);
    this.pack();
    this.setVisible(true);

}
    private class FlipListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
          remove(flipButton); 
          add(confidenceButtons,BorderLayout.SOUTH);
          validate();
          repaint();

        }
      } 
      private class ColorListener implements ActionListener{

        public void actionPerformed(ActionEvent e){

          remove(confidenceButtons); 
          add(flipButton,BorderLayout.SOUTH);
          validate();
          repaint();
        }
      }
    /**
     * @param args
     */
    public static void main(String[] args) {
        new Frame();

    }

}
    

要回复问题请先登录注册