How to replace JPanel with another JPanel

22,674

Solution 1

  1. don't to use AbsoluteLayout

  2. change validate(); in actionPerformed to contain.validate(); and follows with contain.repaint();

  3. rename class name (reserved Java word, or methods name) Frame (java.awt.Frame) to MyFrame (for example)

  4. use CardLayout instead of remove and then add a new JPanel on runtime

Solution 2

Try this, Following code will load the second jPanel (NewOrder) to first jPanel(jpMain)

NewOrder no = new NewOrder(); //This is the object of Second JPanel

// jpMain - This is the First JPanel
jpMain.setLayout(new java.awt.BorderLayout());
jpMain.removeAll();
jpMain.add(no);
jpMain.revalidate();

Solution 3

You must call validate() and then repaint() on the containing panel after you do the remove and add operations.

contain.validate();
contain.repaint();

Solution 4

you need to do like this :

     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();
        repaint();
        //System.out.println("in4");
        setVisible(true);
        //System.out.println("in5");
    }
});

Solution 5

Several issues with your code. Here is fixed version:

public class Frame extends JFrame {

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

    public Frame() {
        super("Change a panel");
        setSize(350, 350);
        getContentPane().setLayout(null); // Changed here
        setLocationRelativeTo(null);
        setResizable(false);

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

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

        reChangeButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                contain = getContentPane();
                contain.removeAll();

                reChange2 = new JPanel(null);
                reChange2.setBackground(Color.white);
                reChange2.setSize(240, 225);
                reChange2.setBounds(50, 50, 240, 225);

                contain.add(reChange2);
                invalidate(); // Changed here
                repaint(); // Changed here
            }
        });
    }

    public static void main(String[] args) {
        Frame frame = new Frame();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
Share:
22,674
Admin
Author by

Admin

Updated on July 09, 2022

Comments

  • Admin
    Admin almost 2 years

    I want to replace a Jpanel with another one in a JFrame I already search and try my code but nothing's happen this is my code :

    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);
        }
    }
    

    can someone help me ? Thanks a lot