如何用另一个JPanel替换JPanel

Ard*_*han 6 java layout swing jpanel jframe

我想在JFrame中替换另一个Jpanel我已经搜索并尝试我的代码但是没有发生这是我的代码:

public class Frame extends JFrame {

    private Container contain;
    private JPanel reChange,reChange2;
    private JButton reChangeButton;

    public Frame() {
        super("Change a panel");
        setSize(350, 350);
        setLayout(null);
        setLocationRelativeTo(null);
        setResizable(false);

        reChange = new JPanel(null);
        reChange.setBackground(Color.red);
        reChange.setSize(240, 225);
        reChange.setBounds(50, 50, 240, 225);
        add(reChange);

        reChangeButton = new JButton("Change It");
        reChangeButton.setBounds(20, 20, 100, 20);
        add(reChangeButton);

        reChangeButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //System.out.println("in");
                contain = getContentPane();
                contain.removeAll();
                //System.out.println("in2");

                reChange2 = new JPanel(null);
                reChange2.setBackground(Color.white);
                reChange2.setSize(240, 225);
                reChange2.setBounds(50, 50, 240, 225);
                //System.out.println("in3");

                contain.add(reChange2);
                validate();
                //System.out.println("in4");
                setVisible(true);
                //System.out.println("in5");
            }
        });

    }

    public static void main(String[] args) {
        Frame frame = new Frame();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
Run Code Online (Sandbox Code Playgroud)

有人能帮我吗 ?非常感谢

mKo*_*bel 6

  1. 不要使用 AbsoluteLayout

  2. 改变validate();actionPerformedcontain.validate();与如下contain.repaint();

  3. 将类名(保留的Java字或方法名)Frame(java.awt.Frame)重命名为MyFrame(例如)

  4. 使用CardLayout而不是删除然后JPanel在运行时添加新的

  • @David Kroukamp对所有Java用户都无效,他们中的大多数仍然使用Java6和次要版本(错过了大多数对Windows操作系统的限制) (2认同)

Dan*_* D. 2

执行删除和添加操作后,您必须在包含面板上调用validate()和 then 。repaint()

contain.validate();
contain.repaint();
Run Code Online (Sandbox Code Playgroud)