Como escondo o JPanel atual e mostro um novo com um botão em Java?

Eu infelizmente tenho que usar várias janelas neste programa e eu não acho que o CardLayout vai funcionar porque eu não posso ter nenhum botão constante entre os diferentes layouts. Então, estou tentando codificar um botão para ocultar o JPanel atual (o Painel) e mostrar um novo (oPlacebo).

Estou tentando esconder o Painel em um ActionListener assim:

frame.getContentPane().remove(thePanel);

Eu pensei que isso funcionaria, mas apenas congela o meu programa assim que eu apertar o botão.

Aqui está um pedaço do código para o contexto:

public class Reflexology1 extends JFrame{
JButton button1, button2;
JButton movingButton;
JTextArea textArea1;
int buttonAClicked, buttonDClicked;
private long _openTime = 0;
private long _closeTime = 0;
JPanel thePanel = new JPanel();
JPanel thePlacebo = new JPanel();
final JFrame frame = new JFrame("Reflexology");

public static void main(String[] args){
    new Reflexology1();
}

public Reflexology1(){


    frame.setSize(600, 475);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setTitle("Reflexology 1.0");
    frame.setResizable(false);


    button1 = new JButton("Accept");
    button2 = new JButton("Decline");
    movingButton = new JButton("Click Me");

    ListenForAcceptButton lForAButton = new ListenForAcceptButton();
    ListenForDeclineButton lForDButton = new ListenForDeclineButton();
    button1.addActionListener(lForAButton);
    button2.addActionListener(lForDButton);
    //movingButton.addActionListener(lForMButton);

    JTextArea textArea1 = new JTextArea(24, 50);

    textArea1.setText("Tracking Events\n");
    textArea1.setLineWrap(true);
    textArea1.setWrapStyleWord(true);
    textArea1.setSize(15, 50);

    FileReader reader = null;
    try {
        reader = new FileReader("EULA.txt");
        textArea1.read(reader, "EULA.txt");
    } catch (IOException exception) {
        System.err.println("Problem loading file");
        exception.printStackTrace();
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException exception) {
                System.err.println("Error closing reader");
                exception.printStackTrace();
            }
        }
    }

    JScrollPane scrollBar1 = new JScrollPane(textArea1, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    AdjustmentListener listener = new MyAdjustmentListener();

    thePanel.add(scrollBar1);
    thePanel.add(button1);
    thePanel.add(button2);
    thePlacebo.add(movingButton);

    frame.add(thePanel);

    ListenForWindow lForWindow = new ListenForWindow();
    frame.addWindowListener(lForWindow);
    frame.setVisible(true);

}
// Implement listeners

private class ListenForAcceptButton implements ActionListener{
    public void actionPerformed(ActionEvent e){
        if (e.getSource() == button1){
            Calendar ClCDateTime = Calendar.getInstance();
            System.out.println(ClCDateTime.getTimeInMillis() - _openTime);
            _closeTime = ClCDateTime.getTimeInMillis() - _openTime;
            frame.getContentPane().remove(thePanel);
        }
    }
}

Alguém sabe o que eu posso estar fazendo errado?

questionAnswers(2)

yourAnswerToTheQuestion