titulo - personalizar la barra de título de una ventana java



¿Cómo cambiar JPanels en un JFrame desde dentro del panel? (1)

Al igual que :

public class CardLayoutDemo extends JFrame {

    public final String YELLOW_PAGE = "yellow page";
    public final String RED_PAGE = "red page";
    private CardLayout cLayout;
    private JPanel mainPane;
    boolean isRedPaneVisible;

    public CardLayoutDemo(){

        setTitle("Card Layout Demo");
        setSize(400,250);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        mainPane = new JPanel();
        cLayout = new CardLayout();
        mainPane.setLayout(cLayout);

        JPanel yellowPane = new JPanel();
        yellowPane.setBackground(Color.YELLOW);
        JPanel redPane = new JPanel();
        redPane.setBackground(Color.RED);

        mainPane.add(YELLOW_PAGE, yellowPane);
        mainPane.add(RED_PAGE, redPane);
        showRedPane();

        JButton button = new JButton("Switch Panes");
        button.addActionListener(e -> switchPanes() );

        setLayout(new BorderLayout());
        add(mainPane,BorderLayout.CENTER);
        add(button,BorderLayout.SOUTH);
        setVisible(true);
    }

    void switchPanes() {

        if (isRedPaneVisible) {showYelloPane();}
        else { showRedPane();}
    }

    void showRedPane() {
        cLayout.show(mainPane, RED_PAGE);
        isRedPaneVisible = true;
    }

    void showYelloPane() {
        cLayout.show(mainPane, YELLOW_PAGE);
        isRedPaneVisible = false;
    }

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

Por lo tanto, estoy tratando de hacer un menú funcional básico para un juego simple. Intenté hacer esto creando 2 JPanels, uno para el juego real y otro para mi menú.

Lo que estoy tratando de hacer es tener un botón en mi panel de Menú que cuando se presiona, cambia el JPanel que se muestra en el JFrame padre del del menú al del juego real.

Aquí está mi código:

class Menu extends JPanel
{
   public Menu()
   {
      JButton startButton = new JButton("Start!");
      startButton.addActionListener(new Listener());
      add(startButton);
   }

   private class Listener implements ActionListener
   {
      public void actionPerformed(ActionEvent e)
      {     
         Container container = getParent();
         Container previous = container;
         System.out.println(getParent());
         while (container != null)
         {
            previous = container;
            container = container.getParent();
         }
         previous.setContentPane(new GamePanel());      
      }
   }
}

Como pueden ver, he creado un Listener para mi botón de inicio. Dentro del oyente, utilicé un ciclo while para llegar al JFrame, a través del método getParent() . El programa obtiene el objeto JFrame, sin embargo, no me permite llamar al método setContentPane ...

¿Alguien sabe cómo hacer que esto funcione, o una mejor manera de ir y venir entre un menú y un juego?





jpanel