0

I want to know how to change the content of a JFrame at runtime. Like adding a new JPanel and removing the old JPanel.

DNA
  • 42,007
  • 12
  • 107
  • 146
  • 1
    What's wrong with `JFrame.remove()`, `JFrame.add()` ? – DNA Feb 22 '12 at 19:17
  • 1
    possible duplicate of [How do I change JPanel inside a JFrame on the fly?](http://stackoverflow.com/questions/218155/how-do-i-change-jpanel-inside-a-jframe-on-the-fly) – DNA Feb 22 '12 at 19:30
  • possible duplicate of http://stackoverflow.com/questions/9371460/how-can-i-stack-overlay-jpanels-in-java/9377623#9377623? – Juvanis Feb 22 '12 at 19:48

3 Answers3

2

You can consider using CardLayout to change the active panel in a frame.

Juvanis
  • 25,802
  • 5
  • 69
  • 87
0

Changing JPanel at runtime here is the Code :

package stack;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class RemoveAndAddPanel implements ActionListener{
    JFrame frame;
    JPanel firstPanel;
    JPanel secondPanel;
    JPanel controlPanel;
    JButton nextButton;
    JPanel panelContainer;
    JButton preButton;
    JPanel contentPane;

    public RemoveAndAddPanel() {
        JFrame.setDefaultLookAndFeelDecorated(true);
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        firstPanel = new JPanel();
        firstPanel.add(new JLabel("FirstPanel"));
        firstPanel.setPreferredSize(new Dimension(100,100));

        secondPanel = new JPanel();
        secondPanel.add(new JLabel("Second panel"));
        secondPanel.setPreferredSize(new Dimension(100,100));

        panelContainer = new JPanel();
        contentPane = new JPanel(new BorderLayout());

        nextButton = new JButton("Next panel");
        preButton = new JButton("PreButton");
        controlPanel = new JPanel();

        nextButton.addActionListener(this);
        preButton.addActionListener(this);
        preButton.setEnabled(false);

        controlPanel.add(preButton);
        controlPanel.add(nextButton);

        panelContainer.setLayout(new BorderLayout());
        panelContainer.add(firstPanel,BorderLayout.CENTER);
        contentPane.add(controlPanel, BorderLayout.SOUTH);
        contentPane.add(panelContainer,BorderLayout.CENTER);

        frame.setContentPane(contentPane);

        frame.setVisible(true);
        frame.setSize(300,100);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == nextButton) {
            panelContainer.removeAll();
            panelContainer.setSize(0,0);
            panelContainer.setSize(secondPanel.getSize());
            panelContainer.add(secondPanel,BorderLayout.CENTER);
            panelContainer.revalidate();


            nextButton.setEnabled(false);
            preButton.setEnabled(true);
        }
        if (e.getSource() == preButton) {
            panelContainer.removeAll();
            panelContainer.setSize(0,0);
            panelContainer.setSize(firstPanel.getSize());
            panelContainer.add(firstPanel,BorderLayout.CENTER);
            nextButton.setEnabled(true);
            preButton.setEnabled(false);
        }
    }
    public static void main(String args[]) {
        new RemoveAndAddPanel();
    }
}
Ajil O.
  • 6,562
  • 5
  • 40
  • 72
Ganesh Patel
  • 450
  • 5
  • 15
-1

JFrame.setContentPane()

jlewis42
  • 923
  • 1
  • 6
  • 12