sábado, 20 de abril de 2013
Java: Swing: JCheckBox, JRadioButton y ButtonGroup
Francisco
17:58
botones
,
buttongroup
,
checkbox
,
gui
,
java
,
jcheckbox
,
jframe
,
jlabel
,
jradiobuton
,
por: Francisco Vargas
,
programación java
,
radiobuton
,
swing
5 comentarios
:
Introducción
Esta vez aprenderemos a crear dos elementos nuevos de interfaz de usuario en Java, los JCheckBox, primero que todo para los que no saben que son, los checkbox son unos cuadros que salen en un formulario -por ejemplo- cuando te preguntan: "¿Que te gusta?", salen un montón de opciones y puedes marcar más de una, por otro lado están los JRadioButton son parecidos a los checkbox pero son redondos,
Los radiobutton, son para opciones mutuamente excluyentes, por ejemplo un caso hipotético, en un cuestionario te preguntan "¿Que género eres?", las posibles opciones son "masculino" o "femenino" pero, no puedes tener ambas condiciones a la vez.
Por último tenemos al ButtonGroup, los radiobutton por si solos no pueden ser mutuamente excluyentes, porque son elementos individuales y si no usamos buttonGroup tendríamos que validar esa característica desde código, pero con un buttonGroup lo hacemos automáticamente.
Imaginemos el ButtonGroup como una caja, donde tendremos unas bolitas -los radiobutton- y cerramos la caja, ahora hacemos una salida en la caja por la cual solo puede pasar una bolita a la vez pero, con la condición de que solo puedes sacar una bolita y si la quieres cambiar tienes que devolverla a la caja, entonces si queremos una bolita podremos sacar una -solamente una-, no podemos hacernos de ninguna más, si queremos otra tendremos que devolver la bolita actual y tomar la otra, en caso contrario los checkbox podemos tener todas las bolitas que queramos.
Ahora si todo bien claro a programar, iniciaremos con el JCheckBox:
//Creamos nuestra variable global private JCheckBox check1;
//Creamos el método que regresará el checkbox private JCheckBox getCheck1() { //inicializamo check1 = new JCheckBox(); //le asignamos una posición check1.setBounds(80, 30, 20, 20); //Decimos que esté seleccionado por defecto check1.setSelected(true); //por ultimo retornamos return check1; }
Como ven el método no tiene nada del otro mundo, es muy sencillo crearlos, lo de decir que este seleccionado por defecto es opcional.
//Creamos la variable Global private JRadioButton radio1; //Método que retorna el radiobutton private JRadioButton getRadio1() { //inicializamos radio1 = new JRadioButton(); //seleccionamos por defecto radio1.setSelected(true); //posicionamos radio1.setBounds(80, 100, 20, 20); //retornamos el objeto return radio1; }
Es más util usar el selected(boolean) en los radiobutton, para que siempre exista una opción por defecto y no quede vacío.
Bien ya sabemos crearlos entonces, vamos a hacer un ejemplo rápido con estos dos elementos e integramos lo que es el buttonGroup, primero crearemos: seis Jlabel para los textos, dos radioButton y dos Checkbox, acá les dejo el código de todos ellos:
private JLabel getLabel1() { JLabel l = new JLabel("Seleccione que le gusta"); l.setBounds(10, 5, 180, 30); return l; } private JLabel getLabel2() { JLabel l = new JLabel("Comer"); l.setBounds(10, 30, 80, 30); return l; } private JLabel getLabel3() { JLabel l = new JLabel("Dormir"); l.setBounds(10, 50, 80, 30); return l; } private JCheckBox getCheck1() { check1 = new JCheckBox(); check1.setBounds(80, 30, 20, 20); check1.setSelected(true); return check1; } private JCheckBox getCheck2() { check2 = new JCheckBox(); check2.setBounds(80, 53, 20, 20); return check2; } private JLabel getLabel4() { JLabel l = new JLabel("Genero"); l.setBounds(10, 80, 80, 30); return l; } private JLabel getLabel5() { JLabel l = new JLabel("Masculino"); l.setBounds(10, 100, 80, 30); return l; } private JLabel getLabel6() { JLabel l = new JLabel("Femenino"); l.setBounds(10, 115, 80, 30); return l; } private JRadioButton getRadio1() { radio1 = new JRadioButton(); radio1.setSelected(true); radio1.setBounds(80, 100, 20, 20); return radio1; } private JRadioButton getRadio2() { radio2 = new JRadioButton(); radio2.setBounds(80, 120, 20, 20); return radio2; }
Hasta ahora todo normal, entonces vamos a crear el buttongroup con el siguiente código:
//Creación del grupo de botones recibe nuestro radiobutton creados //anteriormente private void getButtonGroup (JRadioButton radio1, JRadioButton radio2){ //creamos el objeto ButtonGroup bgroup = new ButtonGroup(); //añadimos al grupo el primer radioButton bgroup.add(radio1); //añadimos al grupo el segundo radioButton bgroup.add(radio2); }
Como vemos en un método void y esto ¿porque? ¿no lo deberíamos agregar a nuestro JFrame?, la respuesta es no, lo que agregamos son los radiobutton que pueden estar en distintos lugares nosotros solo usamos dos pero, pueden ser muchos más, entonces, para que se entienda mejor diremos que el grupo de botones trabaja por debajo.
Lo llamamos en el constructor más solo trabaja en lógica, no es un elemento de interfaz.
Finalmente agregamos todos los elementos al JFrame, mi costructor quedaría así:
public Checs() { add(getCheck1()); add(getCheck2()); add(getLabel1()); add(getLabel2()); add(getLabel3()); add(getLabel4()); add(getLabel5()); add(getLabel6());
// acá se añaden los radiobutton al buttongruop getButtonGroup(getRadio1(), getRadio2()); add(this.radio1); add(this.radio2); inicializador(); }
Prestemos atención que llamamos a nuestro método de crear el grupo y le pasamos como parámetro nuestros dos métodos para crear los radioButton, y luego agregamos los radiobutton al JFrame. Al final de todo mi clase queda de la siguiente manera:
import javax.swing.ButtonGroup; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JRadioButton; @SuppressWarnings("serial") public class Checs extends JFrame { private JCheckBox check1; private JCheckBox check2; private JRadioButton radio1; private JRadioButton radio2; public Checs() { add(getCheck1()); add(getCheck2()); add(getLabel1()); add(getLabel2()); add(getLabel3()); add(getLabel4()); add(getLabel5()); add(getLabel6()); getButtonGroup(getRadio1(), getRadio2()); add(this.radio1); add(this.radio2); inicializador(); } private void inicializador() { setSize(400, 300); setLayout(null); setTitle("Aprendiendo Checkbox"); setLocationRelativeTo(null); setVisible(true); setResizable(false); setDefaultCloseOperation(EXIT_ON_CLOSE); } private JLabel getLabel1() { JLabel l = new JLabel("Seleccione que le gusta"); l.setBounds(10, 5, 180, 30); return l; } private JLabel getLabel2() { JLabel l = new JLabel("Comer"); l.setBounds(10, 30, 80, 30); return l; } private JLabel getLabel3() { JLabel l = new JLabel("Dormir"); l.setBounds(10, 50, 80, 30); return l; } private JCheckBox getCheck1() { check1 = new JCheckBox(); check1.setBounds(80, 30, 20, 20); check1.setSelected(true); return check1; } private JCheckBox getCheck2() { check2 = new JCheckBox(); check2.setBounds(80, 53, 20, 20); return check2; } private JLabel getLabel4() { JLabel l = new JLabel("Genero"); l.setBounds(10, 80, 80, 30); return l; } private JLabel getLabel5() { JLabel l = new JLabel("Masculino"); l.setBounds(10, 100, 80, 30); return l; } private JLabel getLabel6() { JLabel l = new JLabel("Femenino"); l.setBounds(10, 115, 80, 30); return l; } private JRadioButton getRadio1() { radio1 = new JRadioButton(); radio1.setSelected(true); radio1.setBounds(80, 100, 20, 20); return radio1; } private JRadioButton getRadio2() { radio2 = new JRadioButton(); radio2.setBounds(80, 120, 20, 20); return radio2; } //Creación del grupo de botones recibe nuestro radiobutton creados //anteriormente private void getButtonGroup (JRadioButton radio1, JRadioButton radio2){ //creamos el objeto ButtonGroup bgroup = new ButtonGroup(); //añadimos al grupo el primer radioButton bgroup.add(radio1); //añadimos al grupo el segundo radioButton bgroup.add(radio2); } public static void main(String[] args) { new Checs(); } }
Documentación Java JCheckBox: http://docs.oracle.com/javase/8/docs/api/javax/swing/JCheckBox.html
Documentación Java JRadioButton: https://docs.oracle.com/javase/8/docs/api/javax/swing/JRadioButton.html
Documentación Java ButtonGroup: http://docs.oracle.com/javase/8/docs/api/javax/swing/ButtonGroup.html
Conclusión
Todos los elementos que aprendimos anteriormente, son muy utilizados al momento de crear formularios, debido a que brindan muchas facilidades e inclusive en muchos casos se libera de las validaciones.
Suscribirse a:
Enviar comentarios
(
Atom
)
muy bueno me sirvió mucho.. gracias por la ayuda
ResponderEliminarQue bueno me alegro :D
EliminarBuenas tardes, tengo la siguiente duda referente a los radiobutton y quiza ustedes me puedan ayudar:
ResponderEliminarPartimos que tengo dos grupos de radiobutton.
Quisiera poder guardar el radiobutton seleccionado de cada grupo en una String.
He testeado de la siguiente forma:
String simbolo1=grupo1.getSelection().getSelectedObjects().toString();
String simbolo2=grupo2.getSelection().getSelectedObjects().toString();
pero me falla el codigo al llegar a ese punto.
Gracias por adelantado
Y para que sería eso? que necesita hacer
EliminarBuena informacion Pero, espero que tambien tenga un apartado para botongroup.isselected( );
ResponderEliminarcomo funciona esa funcion