Categorías: Java

Usar JPanel En Java

Los JPanel en Java son objetos contenedores, la finalidad de estos objetos es la agrupación de otros objetos tales como botones, campos de texto, etiquetas, selectores, etc; una gran ventaja de Usar JPanel en Java es que podemos manejar la agrupación de una mejor forma, supongamos que tenemos una serie de botones en un panel, y deseamos desactivarlos todos a las vez, en lugar de hacerlo individualmente con los botones, podemos desactivar el panel y con esto los botones.

CREANDO JPANEL EN JAVA

Con el siguiente ejemplo voy a mostrar tres paneles, cada uno con un layout diferente, ademas de esto tres botones los cuales mostraran como quitar o poner la visibilidad en cada panel obteniendo el beneficio de la agrupación que comentaba en la introducción:

import java.awt.BorderLayout;
import java.awt.FlowLayout;
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.JOptionPane;
import javax.swing.JPanel;

public class GuiJava implements ActionListener{//implementando el listener de eventos
   
    JPanel jp1, jp2, jp3;
    JButton jb1, jb2, jb3, jbP1, jbP2, jbP3;   
    
    public GuiJava(){
        
        JFrame jfM = new JFrame("JPanel En Java");  
        jfM.setLayout(null);
        
        
        gridJP(); bordJP(); flowJP(); //invocamos los metodos que contienen los paneles 
        
        jbP1 = new JButton("Panel 1"); jbP2 = new JButton("Panel 2"); jbP3 = new JButton("Panel 3");
        
        jp1.setBounds(10, 10, 200, 200); jp2.setBounds(240, 10, 400, 250); jp3.setBounds(10, 270, 400, 150);
        
        jbP1.setBounds(10, 430, 90, 20); jbP2.setBounds(110, 430, 90, 20); jbP3.setBounds(210, 430, 90, 20);
        
        jfM.add(jp1); jfM.add(jp2); jfM.add(jp3); 
        jfM.add(jbP1); jfM.add(jbP2); jfM.add(jbP3);
        
        jbP1.addActionListener(this); jbP2.addActionListener(this); jbP3.addActionListener(this);
        
        jfM.setLocation(100, 50);
        jfM.setResizable(false);
        jfM.setVisible(true);
        jfM.setSize(800, 600);
        jfM.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    public void gridJP(){
        
        jp1 = new JPanel(new GridLayout(3, 1, 5, 7));//filas, columnas, espacio entre filas, espacio entre columnas
               
        jb1= new JButton("B1"); jb2= new JButton("B2"); jb3= new JButton("B3");//creamos los objetos para el panel
        
        jp1.add(jb1); jp1.add(jb2); jp1.add(jb3);//añadimos los objetos al jpanel
        
        jb1.addActionListener(this); jb2.addActionListener(this); jb3.addActionListener(this);
        
        jp1.setVisible(true);
    }
    
    public void bordJP(){
        jp2 = new JPanel(new BorderLayout(2, 3));//espacio entre las regiones, horizontal y vertical
        
        jb1= new JButton("B1"); jb2= new JButton("B2"); jb3= new JButton("B3");//añadiendo objetos al jpanel
        
        jp2.add(jb1, BorderLayout.NORTH);//boton al panel norte
        jp2.add(jb2, BorderLayout.WEST); //boton a la region oeste
        jp2.add(jb3, BorderLayout.CENTER); //boton a la region centro    
        
        jb1.addActionListener(this); jb2.addActionListener(this); jb3.addActionListener(this);
        
        jp2.setVisible(true);
    }
    
    public void flowJP(){
        jp3 = new JPanel(new FlowLayout());
        
        jb1= new JButton("B1"); jb2= new JButton("B2"); jb3= new JButton("B3");//añadiendo objetos al jpanel
        
        jp3.add(jb1); jp3.add(jb2); jp3.add(jb3);//añadimos los objetos al jpanel
        
        jb1.addActionListener(this); jb2.addActionListener(this); jb3.addActionListener(this);
        
        jp3.setVisible(true);
    }
    
    public static void main(String[] args) {        
        GuiJava gj = new GuiJava();//uso de constructor para la ventana
    }

    @Override
    public void actionPerformed(ActionEvent e) {//sobreescribimos el metodo del listener
        
        if(e.getSource() == jbP1){
            if(jp1.isVisible()){
                jp1.setVisible(false);
            }else
                jp1.setVisible(true);
        }else if(e.getSource() == jbP2){
            if(jp2.isVisible()){
                jp2.setVisible(false);
            }else
                jp2.setVisible(true);
            
        }else if(e.getSource() == jbP3){
            if(jp3.isVisible()){
                jp3.setVisible(false);
            }else
                jp3.setVisible(true);
            
        }else{
            JOptionPane.showMessageDialog(null, e.getActionCommand());
        }
    }
}

Si se ejecuta el codigo se vera la siguiente ventana:

Y si queremos algo mas, como adornar el panel, hacer visible la frontera de este, configurar el borde con color al jpanel, o asignarle margen interno al jpanel; esto lo haremos con la siguiente linea:

//la siguiente linea es para dar margen interior y color al jpanel
        jp1.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.black),BorderFactory.createEmptyBorder(10, 15, 5, 15)));

El jp1, corresponde al objeto del primer panel, si se desea este borde a determinado panel, hay que configurarlo por separado, en el siguiente ejemplo se configuro para el primer y segundo panel:

Como se ve en la anterior imagen, un cambio mínimo hace una buena diferencia para la vista del usuario, y esto es importante 😉

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 chaval, me sirvió mucho para aprender acerca del funcionamiento espiritual del mundo dentro del mundo de David Cage.

  • Como hago para cambiar las acciones de cada botón y me permitan realizar otras operaciones usando como menú...

  • Hola, una pregunta, es que necesito ocultar tres Paneles que ya tengo creados, y que cuando yo con un JComboBox escoja uno de los 3 items, se visualice uno de los tres JPanel que tengo creados, la pregunta es ¿Cual codigo me recomendarías usar para realizar esta acción, que elabore un array y el numero determinado de JPanel en el array se utilice en un If y dentro de la condición escribir un setVisible(true) o simplemente con un getSelectedIndex(); y crear un if para este? Podrias ayudarme, jejej es que en realidad estoy estudiando eso en bachillerato y apenas empecé, estoy realizando un sistema de entradas para una base de datos, yo utilizo el NetBeans IDE 7.3.1, muy buen post, le entendí bastante.

  • Hola, buenas. Tenia una duda. Estoy haciendo una aplicación donde dentro de un jpanel hay un jbutton, y me gustaría que al hacer click en ese jbutton, se abriera otro jpanel. No se como hacer que funcione. He probado a abrir ventanas desde un jframe, y ahí, sí que me sale. Pero no se porque desde un jpanel no me sale. Es posible? Si fuera así, como? Gracias

      • Quiero hacerlo en una ventana independiente. Básicamente, lo que quiero es que un jbutton pueda abrir una ventana(jpanel, jdialog...) desde un jpanel.

  • hola, buenas noches, mira tengo una pregunta, estoy haciendo un juego de poker, estamos usando en mismo IDE, y pues necesito crear un jpanel, o lo que sea que me muestre un jtext y como cinco jlabel, el problema es que hasta el momento ya tengo un jframe en donde muestro las cartas y donde sucede el juego por decirlo de alguna manera, pero no lo he hecho por código sino por la opción design, entonces no se como hacer para crear este jframe o jlabel, que me aparezco luego de que aparezca el que ya tengo,si me pudieras colaborar, realmente me ayudarías te lo agradecería en el alma

    • Disculpa por responderte algo tarde, lo que pretendes hacer es ocultar y mostrar un jpanel, o algo asi. En el anterior link encontraras como hacerlo. Por la parte de diseño es algo mas enredado, en cuanto a los eventos, si das click derecho de cualquier componente este te mostrara para añadir codigo en determinado evento. El problema viene cuando quieres explicar el codigo y te encontraras con codigo que tu no has ingresado. Exitos!

  • ¿Como sería cambiar un panel por otro? Es decir, destruir uno y poner otro en su lugar.???

    Gracias.

    • Hola @J.Santos, para destruir un objeto basta con la siguiente linea: objeto = null; con lo anterior ya queda destruido, pero ten cuidado! Ya que no jugaras con la visibilidad del Jpanel para mostrarlo u ocultarlo, sino con la existencia de los objetos, en otras palabras usando una condición como la siguiente: objeto ==null ó objeto!=null, este ultimo es si el objeto existe.

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