Categorías: Java

Mostrar y Ocultar Panel de Clase Externa en Java

En un anterior post di a conocer un código para mostrar y ocultar los JPanel en java en un solo contenedor, pero si queremos ir mas allá?, tal como Mostrar y Ocultar un Panel de Clase Externa. Supongamos que tenemos una app, pero queremos mostrar varios formularios en un solo contenedor, cada formulario sera propio de una clase, pero que pasa cuando tenemos mas de una clase externa para mostrar? Pues bien, para este ejemplo hago uso de una clase principal, y dos clases mas como ayuda para el ejercicio.

 

CLASE PRINCIPAL

 

+ Ver Código Clase Main...
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class EjercicioPanel {

    JFrame winMain;
    JPanel jpMenBot;
    panel1 objPn1 = new panel1();
    panel2 objPn2 = new panel2();
    
    public EjercicioPanel(){
        
        winMain = new JFrame("EJERCICIO PANEL");
        winMain.setLayout(new BorderLayout(5, 5));
        
        menuBotones();       
        winMain.add(jpMenBot, BorderLayout.WEST);
        
        winMain.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        winMain.setPreferredSize(new Dimension(480, 500));
        winMain.setSize(480, 500);
        winMain.setLocation(200, 90);
        winMain.setVisible(true);
    }
    
    private void menuBotones(){
        
         jpMenBot = new JPanel(new GridLayout(2, 1, 10, 45));        
        
        JButton jbPan1 = new JButton("Panel 1");
        JButton jbPan2 = new JButton("Panel 2");
        
        jbPan1.setActionCommand("panel1"); jbPan2.setActionCommand("panel2");
        
        evenBoton eBtn = new evenBoton();
        
        jbPan1.addActionListener(eBtn); jbPan2.addActionListener(eBtn);
        
        jpMenBot.add(jbPan1); jpMenBot.add(jbPan2);        
        jpMenBot.setVisible(true);        
    }
    
    private class evenBoton implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getActionCommand().equals("panel1") ){
                
                if(objPn2.pnPanel2 !=null && objPn2.pnPanel2.isVisible()){
                    
                    objPn2.pnPanel2.setVisible(false);
                    objPn1.mostrarPanel1();                
                    winMain.add(objPn1.pnPanel1, BorderLayout.CENTER);
                    objPn1.pnPanel1.setVisible(true);
                    winMain.pack();//ajusta la ventana y la visibilidad de sus componentes
                }else if(objPn2.pnPanel2 == null ){
                    
                    objPn1.mostrarPanel1();
                
                    winMain.add(objPn1.pnPanel1, BorderLayout.CENTER);
                    objPn1.pnPanel1.setVisible(true);
                    winMain.pack();//ajusta la ventana y la visibilidad de sus componentes
                }
            }else if(e.getActionCommand().equals("panel2")){
                
                if(objPn1.pnPanel1 != null && objPn1.pnPanel1.isVisible()){                    
                    
                    objPn1.pnPanel1.setVisible(false);
                    objPn2.mostrarPanel2();                
                    winMain.add(objPn2.pnPanel2, BorderLayout.CENTER);
                    objPn2.pnPanel2.setVisible(true);
                    winMain.pack();//ajusta la ventana y la visibilidad de sus componentes
                }else if(objPn1.pnPanel1==null){
                    objPn2.mostrarPanel2();
                
                    winMain.add(objPn2.pnPanel2, BorderLayout.CENTER);
                    objPn2.pnPanel2.setVisible(true);
                    winMain.pack();//ajusta la ventana y la visibilidad de sus componentes
                }
            }
        }
        
    }

    public static void main(String[] args) {
       
        EjercicioPanel objEjerPan = new EjercicioPanel();
    }
}

CLASE PANEL 1

 

+ Ver Código Clase Panel 1...
import java.awt.Panel;
import javax.swing.JLabel;


public class panel1 {
    
    Panel pnPanel1;
    
    public void mostrarPanel1(){
        
        pnPanel1 = new Panel();
        
        JLabel jlMostrarTxt1 = new JLabel("Hola gente de jagonzalez! n Este es el primer panel ;)");
        pnPanel1.add(jlMostrarTxt1);
        
        pnPanel1.setSize(150, 100);
        pnPanel1.setVisible(false);
    }
    
}

CLASE PANEL 2

 

+ Ver Código Clase Panel 2...
import java.awt.Panel;
import javax.swing.JLabel;

public class panel2 {
    
    Panel pnPanel2;
    
    public void mostrarPanel2(){
        
        pnPanel2 = new Panel();
        
        JLabel jlMostrarTxt1 = new JLabel("Hola gente de jagonzalez! n Este es el segundo panel ;)");
        pnPanel2.add(jlMostrarTxt1);
        
        pnPanel2.setSize(150, 100);
        pnPanel2.setVisible(false);
    }
    
}

CONCLUSIÓN

 

En las lineas 15 y 16 se crean dos objetos, para manipular los paneles de sus respectivas clases. En los eventos de los botones usamos la misma lógica empleada en el anterior ejercicio con estos componentes.

Si te ha gustado el post, compártelo, regala un like ó comenta 😉

WP Dev JaGonzalez

Hijo, esposo y padre de un hermoso niño. Amante de los animales, la tecnología, informática y programación. Si tienes alguna duda, inquietud, comentario o deseas comunicarte directamente conmigo, puedes enviarme un correo electrónico a admin@jagonzalez.org

Ver comentarios

  • Muchas gracias por habilitar el código!
    Quería haberte escrito por correo electrónico (pero no vi tu correo) para comentarte las dos clases de los paneles están nombradas con minúsculas las primeras letras.

    Muchas gracias

  • Hola JAGONZALEZ,

    He llegado a este artículo porque necesito realizar precisamente mostrar u ocultar paneles usando clases. No sé si el código con el que lo haces ha sido quitado o no lo encuentro.

    Tu otro artículo para ocultar paneles dentro de una misma clase está genial, con código super limpio.

    Muchas gracias.
    Saludos.

  • Wow, interesante como manejas los paneles de esta forma, espero que mas adelante comparta un ejemplo completo :D

Compartir
Publicado por
WP Dev JaGonzalez

Entradas recientes

iPhone Hackeado: Qué Hacer para Proteger tu Dispositivo y Asegurar tu Seguridad

¿Has notado aplicaciones desconocidas o un drenaje inesperado de la batería? Estos podrían ser indicios…

2 semanas hace

Cómo Restablecer un iPhone a su Estado de Fábrica

Saber cómo Restablecer un iPhone a su Estado de Fábrica es clave para solucionar problemas…

3 semanas hace

Motorola planea lanzar al menos dos nuevos teléfonos Moto G en septiembre

Motorola ha confirmado el lanzamiento de Moto G84 5G y Moto G54 5G en India,…

1 año hace

El equipo de WizardLM afirma que un modelo de IA de terceros les robó el trabajo

Recuerde WizardCoder, ¿el codificador de IA que cubrimos recientemente aquí en Windows Report? Nos jactamos…

1 año hace

Las fallas del complemento Jupiter X Core amenazaron a 172.000 sitios web con apropiaciones de cuentas

Los investigadores han descubierto numerosos fallos de seguridad en el complemento WordPress Jupiter X Core…

1 año hace

Consola portátil Xbox: aquí tienes todo lo que necesitas saber al respecto

Para solucionar problemas del sistema de PC con Windows, necesitará una herramienta dedicada Fortect es…

1 año hace