Si necesitas un código de programación en específico, escríbeme al formulario de contacto.

BUSCA TU CÓDIGO


BUSCA MÁS CÓDIGOS DE PROGRAMACIÓN AQUÍ:

▷ Código JAVA: Cambiar de un JPanel a otro con botón siguiente y atrás


Código JAVA anterior:
La Clase Fracción

-------------------------------------------------------------------------------------------

En ocasiones cuando estamos trabajando con ventanas JFrame hacemos uso de contenedores en los cuales  podemos agregar componentes tales como: botones, etiquetas, campos de texto, tablas entre otros.  
En este post explicaremos como visualizar varios Contenedores o JPanel en una ventana JFrame, aplicar este modelo de visualización resulta muy útil cuando queremos tener una mejor distribución de los componentes. 
Si aún no tienes claro cómo crear un proyecto y trabajar con clases te invito a que visites el siguiente post Cómo hacer un proyecto, un paquete y un formulario?.

Clase Principal JFrame
package multiples_jpanel;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Multiples_Jpanel extends JFrame{

    // creamos un objeto de la clase GridBagLayout este sera nuestro layout el cual determinara 
    // el orden en que se distribuiran los componentes
    GridBagLayout layout = new GridBagLayout();
  
   // creamos un objeto de la clase GridBagContraints 
   // en el cual se guarda información de cómo y dónde añadir el componente. 
  
    GridBagConstraints config = new GridBagConstraints();
    
    // creamos tres objetos de la clase JPanel
    jpanel1 panel1 = new  jpanel1();
    jpanel2 panel2 = new  jpanel2();
    jpanel3 panel3 = new  jpanel3();    
    
    // creamos dos objetos de la clase JButtoon
    // el cual nos permitira administrar la visualizacion de los JPanel
    JButton btn_next = new JButton("Siguiente");
    JButton btn_prev = new JButton("Anterior");    
    
    public Multiples_Jpanel(){
        
        this.setSize(600, 600);  // asignamos el ancho y alto a la venta JFrame
        this.setLocationRelativeTo(null);  // centramos la ventana en pantalla
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
        this.setLayout(layout);   // agregamos el layout al JFrame
        
         // agregamos los respectivos contenedores y componentes al JFrame
        config.gridx=0;
        config.gridy=0;
        config.gridwidth=2;
        config.gridheight=1;
        config.weightx=1.0;
        config.weighty=1.0;
        config.anchor=GridBagConstraints.CENTER;
        config.fill= GridBagConstraints.BOTH;
        this.add(panel1, config);
        this.add(panel2, config);
        this.add(panel3, config);     
        
        config.gridx=0;
        config.gridy=1;
        config.gridwidth=1;
        config.gridheight=1;
        config.ipadx=100;
        config.ipady=10;
        config.weighty=0.0;
        config.anchor=GridBagConstraints.CENTER;
        config.fill= GridBagConstraints.CENTER;
        this.add(btn_prev, config);

        config.gridx=1;
        config.gridy=1;
        config.gridwidth=1;
        config.gridheight=1;
        config.ipadx=100;
        config.ipady=10;
        config.weighty=0.0;
        config.anchor=GridBagConstraints.CENTER;
        config.fill= GridBagConstraints.CENTER;
        this.add(btn_next, config);  
        
        panel1.setVisible(true);
        panel2.setVisible(false);
        panel3.setVisible(false);        
        // creamos los aventos 
        btn_next.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                    
                if(panel1.isVisible()){
                    
                    panel2.setVisible(true);
                    panel3.setVisible(false);
                    panel1.setVisible(false);
                    validate();
                    
                }else if(panel2.isVisible()){

                    panel3.setVisible(true);
                    panel2.setVisible(false);
                    panel1.setVisible(false);
                    validate();
                
                }

            }

        });
        
        btn_prev.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                    
                if(panel2.isVisible()){
                
                    panel1.setVisible(true);
                    panel2.setVisible(false);
                    panel3.setVisible(false);
                    
                }else if(panel3.isVisible()){
                    
                    panel2.setVisible(true);
                    panel3.setVisible(false);
                    panel1.setVisible(false);
                    
                }

            }

        });        
        
    }
    // metodoo main
    public static void main(String[] args) {
        
        // instaciamos la clase y hacemos visible nuestro JFrame
        Multiples_Jpanel frame = new Multiples_Jpanel();
        frame.setVisible(true);
        
    }
    
}


Clase perteneciente al primer contenedor
package multiples_jpanel;

import java.awt.Color;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class jpanel1 extends JPanel{

    JLabel label = new JLabel("panel # 1");

    Font fuente = new Font("Comic Sans MS", Font.ITALIC, 40);
    
    GridBagLayout layout = new GridBagLayout();
    GridBagConstraints config = new GridBagConstraints();
    
    public jpanel1(){
        this.setLayout(layout);
        this.setBackground(Color.ORANGE);
        
        label.setFont(fuente);
        
        config.gridx=0;
        config.gridy=0;
        config.gridwidth=1;
        config.gridheight=1;
        config.anchor=GridBagConstraints.CENTER;
        config.fill= GridBagConstraints.BOTH;
        this.add(label, config);
        
    }
    
}



Clase perteneciente al segundo contenedor
package multiples_jpanel;

import java.awt.Color;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class jpanel2 extends JPanel{
    
    JLabel label = new JLabel("panel # 2");  
    Font fuente = new Font("Comic Sans MS", Font.ITALIC, 40);
    
    GridBagLayout layout = new GridBagLayout();
    GridBagConstraints config = new GridBagConstraints();

    public jpanel2(){
    
        this.setLayout(layout);
        this.setBackground(Color.YELLOW);
        
        label.setFont(fuente);
        config.gridx=0;
        config.gridy=0;
        config.gridwidth=1;
        config.gridheight=1;
        config.anchor=GridBagConstraints.CENTER;
        config.fill= GridBagConstraints.BOTH;
        this.add(label, config);
        
        
    }
    
}




Clase perteneciente al tercer contenedor
package multiples_jpanel;

import java.awt.Color;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class jpanel3 extends JPanel{
    
    JLabel label = new JLabel("panel # 3");  
    Font fuente = new Font("Comic Sans MS", Font.ITALIC, 40);
    
    GridBagLayout layout = new GridBagLayout();
    GridBagConstraints config = new GridBagConstraints();
    
    public jpanel3(){
    
        this.setLayout(layout);
        this.setBackground(Color.YELLOW);
        
        label.setFont(fuente);
        config.gridx=0;
        config.gridy=0;
        config.gridwidth=1;
        config.gridheight=1;
        config.anchor=GridBagConstraints.CENTER;
        config.fill= GridBagConstraints.BOTH;
        this.add(label, config);
        
        
    }
    
}




VIDEO TUTORIAL (PASO A PASO)


 
Instrucciones Y Desarrollo Del Código

Procedemos a explicar el código que implementaremos en nuestro proyecto


1. Iniciamos creando la clase del primer contenedor (JPanel), la cual llamaremos jpanel1. 
public class jpanel1 extends JPanel
haremos uso de la herencia y de esta manera podremos utilizar los métodos, procedimientos y atributos de la clase JPanel para esto hacemos uso de la palabra clave extends seguido del nombre de la clase, en este caso  será la clase JPanel.


2. Seguimos trabajando en la clase jpanel1 dentro de las llaves de apertura y cierre de la clase, creamos los siguientes objetos. 


JLabel label = new JLabel("panel # 1"); 
Font fuente = new Font("Comic Sans MS", Font.ITALIC, 40); 
GridBagLayout layout = new GridBagLayout(); 
GridBagConstraints config = new GridBagConstraints();

*Creamos un objeto de la clase JLabel, el cual nos servirá para agregar una etiqueta al JPanel, la cual utilizaremos para mostrar un mensaje en este caso escribiremos como mensaje; “Panel # 1”.

*Creamos un objeto de la clase Font, el cual utilizaremos para crear una fuente de texto, llamaremos al constructor de la clase, en el cual agregaremos el tipo de fuente, el estilo y el tamaño de la fuente.

*Creamos un objeto de la clase Gridbaglayout, utilizaremos el layout para poder administrar la posición o donde se ubicaran los componentes en el JPanel, la clase GridBagLayout está ligada a la clase GridBagContraints. Que nos permitirá posicionar los objetos que agreguemos en el JPanel.


3. Creamos el método constructor de la clase en el cual agregaremos las siguientes líneas de código:








public jpanel1(){ 

    this.setLayout(layout);  

    this.setBackground(Color.ORANGE); 

    label.setFont(fuente);  

    config.gridx=0; 
    config.gridy=0; 
    config.gridwidth=1; 
    config.gridheight=1; 
    config.anchor=GridBagConstraints.CENTER
    config.fill= GridBagConstraints.BOTH
    this.add(label, config); 

 }
*En la primera línea de código llamamos el método setLayout, el cual tendrá como parámetro el layout que administrara los componentes del contenedor, en este caso agregamos el objeto de tipo GridBagLayout (layout).

*En La segunda línea de código cambiamos el color de fondo del JPanel llamando al método setBackGround, el cual lleva como parámetro un objeto de la clase Color


*Hacemos uso del método setFont para cambiar el tipo de fuente del mensaje que visualizaremos en la etiqueta JLabel, para esto hacemos uso del Objeto tipo Font     label.setFont(fuente). 


*Lo siguiente que haremos será hacer uso del objeto de la clase GridBagContrains (config) el cual nos permite administrar el lugar exacto donde agregar los componentes que estemos utilizando.

Si no están familiarizado con este tipo de layout te recomiendo que investigues sobre este tema, este layout en específico es uno de los más potentes a la hora de administrar y posicionar los componentes en un contenedor.



*Debemos importar las librerías necesarias para no tener errores en nuestro código.



import java.awt.Color;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;


Nota : para la creación de las tres clases del tipo contenedor o JPanel aplicaremos estos tres pasos, solo debemos cambiar el nombre de la clase. Para este ejemplo las tres clases del tipo JPanel son: jpanel1, jpanel2, jpanel3.


4. Lo siguiente que haremos será crear la clase principal la cual contendrá la ventana JFrame, en esta clase aplicaremos todos los procesos en el cual administraremos la visualización de los respectivos JPanel que hemos creado con anterioridad. 
Dentro las llaves de apertura y cierre de la clase creamos los siguientes objetos.


GridBagLayout layout = new GridBagLayout();  
GridBagConstraints config = new GridBagConstraints();
    
jpanel1 panel1 = new  jpanel1();
jpanel2 panel2 = new  jpanel2();
jpanel3 panel3 = new  jpanel3();    
    
JButton btn_next = new JButton("Siguiente");
JButton btn_prev = new JButton("Anterior");    

*Creamos un objeto de la clase GridBagLayout y GridBagContrains, recordemos que con estos objetos administramos la ubicación de los componentes que utilizaremos. 

*Creamos los respectivos objetos de la clase jpanel1, jpanel2 y jpanel3 recordemos que estas clases contienen los paneles que visualizaremos en la ventana JFrame.

*Por ultimo creamos dos objetos de la clase JButton los cuales nos permitirán controlar que contenedor o panel sera visible. 

5. Una vez hayamos agregado los contenedores o JPanel a la ventana JFrame procederemos a visualizar y ocultar de la siguiente manera.


panel1.setVisible(true);
panel2.setVisible(false);
panel3.setVisible(false);        
En este caso como trabajamos con tres JPanel, haremos visible un contenedor y el resto los ocultaremos. Igualmente si se trabajan con cuatro, Cinco o más contenedores siempre haremos visible uno y los demás lo ocultaremos, el método para ocultar y hacer visible un componente es setVisible(),este lleva como parámetro el tipo de dato boolean, si queremos visualizar el contenedor llevara true sino llevara false.


6. Para poder controlar que contenedor se hará visible, utilizaremos los botones de siguiente y anterior a estos le agregamos un evento de tipo ActionListener donde verificamos el contenedor que esta visible y el nuevo contenedor que se visualizara.

        
    btn_next.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                    
                if(panel1.isVisible()){
                    
                    panel2.setVisible(true);
                    panel3.setVisible(false);
                    panel1.setVisible(false);
                    validate();
                    
                }else if(panel2.isVisible()){

                    panel3.setVisible(true);
                    panel2.setVisible(false);
                    panel1.setVisible(false);
                    validate();
                
                }

            }

        });
Trabajamos con el primer evento, se activara al oprimir el botón  siguiente.
Como trabajamos con tres contenedores hacemos dos condicionales, en el primer condicional if(panel1.isVisible()).   Si  el primer contenedor es visible lo ocultaremos y visualizamos el segundo contenedor, igualmente si el segundo contenedor esta visible if(panel2.isVisible()). Lo ocultaremos y visualizaremos el tercer contenedor.
Por ultimo llamamos al método Validate()  con este método actualizaremos la ventana JFrame y de esta manera actualizar y visualizar el nuevo JPanel.


        btn_prev.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                    
                if(panel2.isVisible()){
                
                    panel1.setVisible(true);
                    panel2.setVisible(false);
                    panel3.setVisible(false);
                    
                }else if(panel3.isVisible()){
                    
                    panel2.setVisible(true);
                    panel3.setVisible(false);
                    panel1.setVisible(false);
                    
                }

            }

        });

Trabajamos con el segundo evento, se activara al oprimir el botón  anterior.
igualmente que en el evento anterior, en este verificamos que contenedor esta visible. Esto lo hacemos con el fin de que podamos avanzar y regresar a la hora de visualizar los contenedores.









Nota: Debemos importar las librerías necesarias para que nuestro código no tenga ningún tipo de error


import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;


Hay diferentes formas en las que podemos trabajar con contenedores o JPanel, la que estudiamos en este post es una de tantas formas. para aplicar estas operaciones, el principio que hay que tener en cuenta es que siempre habrá un contenedor visibles y el resto los ocultaremos, esto dependerá de la posición en que agreguemos el JPanel, en este caso como los tres contenedores lo agregamos en la misma posición si aplicamos estas operaciones, por ultimo algo importante cuando ocultemos y hagamos visible un JPanel actualizamos los componentes de la ventana JFrame(Validate())




¿Quieres aprender más de JAVA?
Si deseas saber cómo cargar un ComboBox con registros de una base de datos, pero de forma netamente gráfica usando NetBeans IDE, o ver otros temas muy interesantes, no te olvides de revisar los tips de JAVA y seguir el Curso: Cómo lo hago en JAVA? 

Accede a todos los fragmentos de código que hemos publicado en este lenguaje hasta el momento, dando clic en el siguiente enlace: Ver listado de códigos JAVA.

Suscríbete a nuestro blog, vía Email o RSS; además puedes seguirnos a través de nuestras redes sociales como: FacebookTwitter, y Google+.

¿Conoces una forma más óptima de realizar el anterior procedimiento?, no dudes en compartir tu conocimiento con todos nuestros amigos de la web.

Si te fue de gran ayuda esta información, no olvides compartirla con tus amigos y en las redes sociales.
Si tienes dudas o sugerencias al respecto, abajo puedes dejarnos tus comentarios.
Bendiciones...






Comparte este código


6 comentarios:

  1. La verdad no cumple con mis expectativas ya que no muestra el resultado final del código planteado
    .
    .
    .
    .
    .
    .
    .
    .
    Para la próxima debe de poner el resultado del código puesto en la pagina... Gracias espero que te haya servido nuestro comentario

    ResponderBorrar
    Respuestas
    1. Saludos, gracias por la sugerencia no mostramos el resultado aquí en esta sección del blog, pero puedes apreciar el resultado final en el video tutorial.
      Igualmente tenemos un repositorio Github donde solo descargas el proyecto y ejecutas.
      https://github.com/georgesk24/JPanel-Multiple

      Borrar
  2. Este blog ha sido eliminado por un administrador de blog.

    ResponderBorrar
  3. Estoy en fase de aprendizaje y la explicación me parece perfecta, me ha ayudado mucho. Muchas gracias!!

    ResponderBorrar
    Respuestas
    1. Saludos, me alegra que esta explicación te haya ayudado.

      Borrar
    2. Hola Jorge, vi este proyecto y me llamo la atención quisiera sabe como agregarle un juego a cada botón.

      Borrar