jueves 16 de abril de 2009

Agrupar Radio Button (JRadioButton) en Java

Conviene aclarar que esto esto lo hago en Eclipse que no tiene un componente visual que represente una asociación de Radios en su editor visual, así que si usas Eclipse o de menos potencia como BlueJ esto te va a servir, si por el contrario usas otro API que yo no conozco(como NetBeans) podrías investigar si hay una forma mas fácil.
La agrupación de JRadioButton logra que estos dos componentes estén relacionados como llaves, si tenemos un grupo de Radios estos solo uno puede estar seleccionado.
De verdad esta forma es fácil, en eclipse cuando hacemos una Visual Class directamente dibujamos los JRadioButton directamente sobre el JPanel, lo que tenemos que recordar para luego ir al código son los nombres, aunque la ayuda de código de Eclipse es buena.
Una vez que tenemos los dos Radios por ejemplo estos:
radios
Debemos ir al editor de código de nuestra clase heredada de JPanel y agregar esta funcion en algún lugar, por ejemplo al final de todos para no equivocarnos:

private void crearGrupoBotones()
{
    ButtonGroup grupo = new ButtonGroup();
    grupo.add(rbMasc);
    grupo.add(rbFem);
}
La funcion no es ninguna novedad, un método privado de la clase que crea un objeto ButtonGroup sin argumentos, luego se le agregan los botones que se llaman rbMasc y rbFem. Con esto ya tenemos los botones listos para ser asociados.
Lo que falta es añadir es en el constructor de nuestra clase la llamada a esta funcion, luego de la funcion initilizetialize();
Para finalizar ButtonGroup se importa desde aquí:
import javax.swing.ButtonGroup;
Listo a partir de ahora estos Radios están unidos, si estamos usando estos componentes para mostrar distintas alternativas en nuestro formulario y tenemos dos podemos escuchar a los botones con un solo Listener en alguno, el stateChanged, ya que cuando cambia uno cambia el otro.

2 comentarios:

Anónimo dijo...

Hola, me pareció interesante tu código...
Sabes como limpiar lo seleccionado en el RadioButton ??

tipo test dijo...

gracias.