Reemplazar JPanel con JPanel en un JFrame

Tengo una clase que amplía JFrame, y tiene un BorderLayout. Tiene dos variables de instancia privadas de tipo JPanel. Representan paneles de botones y se llaman flipButton y confidenceButtons. Cuando hace clic en el botón, el panel de botones es reemplazado por el otro panel de botones. Es decir, si hace clic en un botón en flipButton, flipButton se reemplaza por trustButtons. Intenté hacerlo así:

   clase privada FlipListener implementa ActionListener {
     public void actionPerformed (ActionEvent e) {
       eliminar (flipButton); 
       add (trustButtons, BorderLayout.SOUTH);
       validar();
       ...
     }
   } 
   clase privada ColorListener implementa ActionListener {
     ...
     public void actionPerformed (ActionEvent e) {
       ...
       eliminar (trustButtons); 
       add (flipButton, BorderLayout.SOUTH);
       validar();
     }
   }

Los botones en flipButton tienen FlipListeners y los que están en trustButton tienen ColorListeners. Cuando se ejecuta el progtwig, al hacer clic en un botón se eliminará el panel, pero no se agrega nada para reemplazarlo. ¿Qué estoy haciendo mal?

EDITAR

CardLayout resultó ser una solución simple y fácil. Resulta que el código anterior funciona; el problema era un error tipográfico en otra sección de mi código. >. <Sin embargo, siempre tuve problemas para usar estos métodos, y CardLayout, me parece, me simplifica. Gracias.

Use un CardLayout , como se muestra aquí .

Vista del juegoVista de puntajes altos

revalidate () + repintado () debería ser un truco, ejemplo aquí

EDITAR:

siente que tiene problemas con eso, ejemplos para eso aquí y aquí y otra vez, ejemplo de trashgod , siéntase libre de construir su pregunta basándose en el código nuevamente

Otra forma es mirar el excelente ejemplo agregado por Andrew Thompson 🙂 +1

intente usar getContentPane () para llamar a los métodos remove (), add () ect ..:

getContentPane().remove(flipButton); getContentPane().add(confidenceButtons,BorderLayout.SOUTH); getContentPane().revalidate(); getContentPane().repaint(); 

Editar: este código funciona para mí:

 import java.awt.BorderLayout; import java.awt.HeadlessException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class Frame extends JFrame { JPanel flipButton =new JPanel(); JPanel confidenceButtons =new JPanel(); public Frame() throws HeadlessException { super(); this.setLayout(new BorderLayout()); JButton b1=new JButton("flip"); b1.addActionListener(new FlipListener()); flipButton.add(b1); JButton b2=new JButton("color"); b2.addActionListener(new ColorListener()); confidenceButtons.add(b2); this.getContentPane().add(flipButton,BorderLayout.SOUTH); this.setSize(250,250); this.pack(); this.setVisible(true); } private class FlipListener implements ActionListener{ public void actionPerformed(ActionEvent e){ remove(flipButton); add(confidenceButtons,BorderLayout.SOUTH); validate(); repaint(); } } private class ColorListener implements ActionListener{ public void actionPerformed(ActionEvent e){ remove(confidenceButtons); add(flipButton,BorderLayout.SOUTH); validate(); repaint(); } } /** * @param args */ public static void main(String[] args) { new Frame(); } } 
    Intereting Posts