Change contentpane of Frame after button clicked

Call revalidate, then repaint. This tells the layout managers to do their layouts of their components:

JPanel contentPane = (JPanel) frame.getContentPane();

contentPane.removeAll();
contentPane.add(panel);
contentPane.revalidate(); 
contentPane.repaint();

Better though if you just want to swap JPanels is to use a CardLayout and have it do the dirty work.


I found a way to do what I outlined above.

Implementing the setpanel method like this:

public void setpanel(JPanel panel)
{
    frame.setContentPane(panel);
    frame.validate();
}

did the trick in my case.

I'm sure that I still need to fix something within my code, since pack() still shrinks the window, but at least the method posted above works.


Whenever you change a frame's containment hierarchy, you have to call pack().

From the docs:

Causes this Window to be sized to fit the preferred size and layouts of its subcomponents. [...] The Window will be validated after the preferredSize is calculated.

Tags:

Java

Swing