Przełączanie między JPanels

Próbuję stworzyć grę. W grze jest kilka różnych ekranów, takich jak menu główne i rzeczywisty ekran gry. Każdy z nich jest osobnym rozszerzeniem jpanel. Dodałem każdą z nich do mojej JFrame, która jest klasą o nazwie Game. W mojej klasie gier mam następujące metody

public void addPanel( JPanel p ) {
    panels.add( p ); // An array of all the different panels I need
    this.getContentPane().add( p );
}

public void switchToPanel( JPanel p ) {
    for ( JPanel somePanel : panels ) {
        somePanel.setVisible( false );
    }

    p.setVisible( true );
    repaint();
}

Chodzi o to, że mam wiele różnych paneli i kiedy muszę pokazać konkretny panel, na przykład ekran menu, wywołuję switchToPanel (myPanel). Zasadniczo po prostu chowając każdy panel, a następnie odkrywając ten, który muszę zobaczyć. Jedynym problemem jest to, że panele te nie pojawiają się, gdy się do nich przełączam. Jedynym, który kiedykolwiek się pojawi, jest panel, który dodałem jako ostatni. W Objective C używam tej techniki do ciągłego przełączania się między widokami i nigdy nie miałem żadnych problemów. Czy tego rodzaju rzeczy nie są dozwolone w Javie?

Edytuj: teraz dzwonię do repaint () po zmianie, ale nadal nie działa

questionAnswers(3)

yourAnswerToTheQuestion