CardLayout, cambiar entre JPanels por ButtonClick

Quiero cambiar entre JPanels haciendo clic en los botones de JPanels.

Por ejemplo: tengo un simulador de JPanel con un simknop de JButton y una ayuda de JPanel con la ayuda de JButton. Quiero cambiar entre estos 2 paneles de JP haciendo clic en los botones. Cuando hago clic en JButton simknop, debe aparecer la ayuda de JPanel y cuando hago clic en JButton help, debe aparecer la simulación de JPanel.

A continuación puedes encontrar las diferentes clases:

main.java
public class main extends JFrame
{

    JPanel cards;
    sim sim;
    help help;

    public main()
    {
        this.setSize(1024,768);
        //this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("Crazy Bombardement");
        this.setLocation(800, 100);//standaard in de hoek van het scherm

        cards = new JPanel();
        cards.setLayout(new CardLayout());
        sim = new sim();
        help = new help();

        cards.add(sim, "SIM");
        cards.add(help, "HELP");    

        this.add(cards);
        this.setVisible(true);
    }

    public static void main(String[] args) 
    {
        new main();
    }
sim.java
public class sim extends JPanel
{
    JButton simknop;

    public sim()
    {
        simknop = new JButton("simknop");
        this.add(simknop);
        this.setBackground(Color.black);
    }

}
help.java
public class help extends JPanel
{
    JButton helpknop;

    public help()
    {
        helpknop = new JButton("helpknop");
        this.add(helpknop);
        this.setBackground(Color.red);
    }

Quiero usar CardLayout para esto, pero no puedo averiguar cómo hacer que funcione para escuchar a los diferentes ActionListeners.

¡Cualquier ayuda es muy apreciada!

Respuestas a la pregunta(1)

Su respuesta a la pregunta