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.
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 😉
¿Has notado aplicaciones desconocidas o un drenaje inesperado de la batería? Estos podrían ser indicios…
Saber cómo Restablecer un iPhone a su Estado de Fábrica es clave para solucionar problemas…
Motorola ha confirmado el lanzamiento de Moto G84 5G y Moto G54 5G en India,…
Recuerde WizardCoder, ¿el codificador de IA que cubrimos recientemente aquí en Windows Report? Nos jactamos…
Los investigadores han descubierto numerosos fallos de seguridad en el complemento WordPress Jupiter X Core…
Para solucionar problemas del sistema de PC con Windows, necesitará una herramienta dedicada Fortect es…
Ver comentarios
Hola :) Quisiera saber como puedo meter un panel dentro de otro panel :3 Gracias!
Hola Blacky, supongamos que tenemos un panel de tipo BorderLayout, supongamos que en el lado izquierdo y derecho irán dos paneles con sus respectivos layout, para esto usaremos el metodo .add quedando de la siguiente forma:
Espero te sea de ayuda.
Una pregunta el post esta muy bueno pero como se hace para que los botones tomen la misma forma y que no se rijan por la cantidad de caracteres..
Hola, me alegra que te haya gustado el post :) Para lo que quieres tendrás que usar el método setBounds para los buttons o Jbuttons, en conjunto de esto tendrás que configurar la disposición del JPanel con un setLayout(null). Un ejemplo claro para lo que quieres lo podrás encontrar en el ejemplo de calculadora básica en java, espero te sirva :)
holaaaa queria saber , ya que eres tan bueno en java , si podrias hacer un programita que tenga un menu donde te pida si calcular cateto opuesto o cateto adyacente y que vos ingreses una fuerza y unn angulo y que de ahi te tire las componentes de esa fuerza , por favor contactate a mi mail porque de verdad lo nesesito con urgencia , muchas gracias
mail: ruofTV@gmail.com
gracias por enviarmelo aunq ya copie tu codigo no puedo ejecutarlo hay q crearlo como una clase especial o lo creas como Jpanel form
Hola luis, mira, depende del IDE que uses, en mi caso uso Netbeans, pero en general, creas la clase con el nombre de la clase del código de ejemplo, recuerda, el nombre de la clase debe coincidir con el nombre del archivo.java, en mi caso la clase la nombre GuiJava, así que el archivo se debe de llamar GuiJava.java, si estas en Netbeans tiene que copiar después de la primer linea, ya que esta denomina el Package donde se encuentran los archivos principales. ;)
Hola me puedes enviar el código completo xfa xq hay partes q no stan completas
Hola :) el siguiente código es del ultimo ejemplo, es algo mas completo, espero te sirva ;)