GUI

¿Cómo agrupar y utilizar botones de opción en una GUI de java?
Saludos!
Continuando con esta serie sobre el uso de los controles gráficos básicos, en este post toca hablar sobre dos de ellos muy parecidos pero de comportamiento ligeramente diferente: los JRadioButton y los JCheckBox.
Pero antes me gustaría explicar un poco por qué es importante utilizar diversos controles al diseñar una aplicación.

Un control para cada entrada.

El control gráfico más básico, y también uno de los más útiles es el JTextField o caja de texto. Sin embargo, debemos utilizar los controles más convenientes que nos permitan cerrar el conjunto de datos que el usuario pueda proporcionar.
Por ejemplo, considera que dentro de la aplicación se requiere conocer la localidad donde vive un usuario. Si dejas que el usuario introduzca esta información en una caja de texto, podría suceder lo siguiente:
  1. Que el usuario escriba cualquier texto que no corresponda con el nombre de una localidad
  2. Podría escribir un nombre de localidad real pero con faltas de ortografía
  3. O no equivocarse y escribir correctamente lo solicitado.
Ahora piensa que de la localidad ingresada, realizarás una búsqueda en una base de datos. Obviamente los escenarios 1 y 2 arrojarán errores en la búsqueda, pues no se encontrarán esas “localidades” dentro de la base de datos.
Por ello es mejor cerrarle al usuario las posibilidades de equivocarse. Con el uso de un JComboBox, por ejemplo, podrías haberlo obligado a seleccionar una localidad de la lista, la cual contendrá los nombres correctos de las localidades, lo que después para realizar una búsqueda en alguna base de datos evitaría los problemas.
Entonces, aunque genere un poco más de esfuerzo para el programador, lo ideal será diseñar nuestra GUI con los controles gráficos más adecuados que ayuden a que el usuario se equivoque menos al introducir datos.

JCheckbox (Casillas de verificación)

La clase JCheckbox proporciona los atributos y métodos para implementar una casilla de verifiación que es básicamente un botón de dos estados. En la siguiente tabla se muestran los métodos más comunes de esta clase.
Nombre y tipo del métodoFunción
boolean  isSelected()Devuelve true si el componente está seleccionado, en caso contrario devuelve false
boolean isEnabled()Devuelve true si el componente está activo, en caso contrario, devuelve false
void setEnabled(boolean)Habilita (true) o deshabilita (false) el objeto, en cuyo caso no puede ser seleccionado
En la figura 1 se muestra un ejemplo de 3 objetos tipo JCkeckBox
jcheckbox
Figura 1. Ejemplo de JCheckBox
En este caso, el método que nos permite tener acceso al valor seleccionado es isSelected(), el cual es el que nos regresa true si el objeto está seleccionado por el usuario o false si no lo está.
El comportamiento que caracteriza a este control y que es reconocido por los usuarios es la posibilidad de poder seleccionar varios objetos de este tipo, sin que sean excluyentes, por lo que al diseñar la GUI de nuestra aplicación debemos respetar las convenciones de uso ya establecidas universalmente y reconocidas por los usuarios.
A continuación te muestro el código correspondiente al botón Aceptar de la interfaz mostrada en la Figura 1.

JRadioButton (Botones de opción)

La clase JRadioButton proporciona los atributos y métodos para implementar un botón de opción el cual es un botón de dos estados mutuamente excluyentes. En la figura 2 se muestra un ejemplo de objetos de esta clase.
jradioButton
Figura 2. Ejemplo de objetos de la clase JRadioButton
Cómo se mencionó, la principal característica de este control es ser mutuamente excluyente, esto quiere decir que, considerando el ejemplo de la figura 2, el usuario sólo puede seleccionar una de las dos alternativas, ya sea “Tengo 18 años o más” o “Tengo menos de 18 años”. Al momento de seleccionar alguna de las dos, la que estaba seleccionada pasa a no seleccionada y viceversa.
Mi recomendación es utilizar este tipo de botones para preguntas excluyentes, donde el usuario deba seleccionar una y sólo una opción de n opciones. Algunos ejemplos de estas preguntas son:
  • Sexo ( femenino / masculino)
  • Pertenecer o no a un rango de edad (como en el ejemplo de la figura 2)
  • Practicar o no algún deporte
entre tantas otras que obliguen a seleccionar sólo una alternativa.

ButtonGroup.

Para lograr este comportamiento, no basta con agregar el control JRadioButton, sino que además es necesario agrupar los controles de este tipo en un ButtonGroup. La clase  ButtonGroup se encuentra en la paleta de controles, en la categoría Swing Controls, tal y como se muestra en la figura 3.
bg
Figura 3. El control Button Group en la categoría Swing Controls de la paleta.
ButtonGroup no es un control visible, por lo que no se mostrará en el JFrame.De hecho, en el panel Navigator tampoco se muestra como un control anclado al JFrame, sino que está categorizado como Otros Componentes (Other Components). Esto se aprecia en la figura 4.
bg1
Figura 4. Dos grupos de JRadioButton agrupados en dos ButtonGroup diferentes
Una vez creado el ButtonGroup, lo único que falta es agregar los JRadioButon al grupo de botones. Para esto, selecciona uno de los JRadioButton y usa la paleta Properties(Propiedades). Ahí se encuentra la propiedad buttonGroup, y dado que ya fué creado el grupo, al presionar la flecha de la lista se desplegará el nombre del grupo. Este proceso se observa en la figura 5.
bg2
Figura 5. Configurando la propiedad buttonGroup de un JRadioButton.
Si no se añaden los controles JRadioButton a un grupo, cada control será independiente, y tendremos el comportamiento no deseado (ni esperado por el usuario) de poder seleccionar los n botones de opción que se muestren en la interfaz.

Métodos de JRadioButton.

Los métodos relacionados con este control son los siguientes:
Nombre del métodoFunción
boolean  isSelected()Devuelve true si el componente está seleccionado, en caso contrario devuelve false
boolean isEnabled()Devuelve true si el componente está activo, en caso contrario, devuelve false
void setEnabled(boolean)Habilita (true) o deshabilita (false) el objeto, en cuyo caso no puede ser seleccionado
Como verás, los métodos son los mismos que se presentan en un control JCheckBox.
Para la interfaz que se muestra en la Figura 4, el siguiente es el código asociado al botón Continuar, en el cual se ejemplifica el uso de botones de opción:

No hay comentarios.:

Publicar un comentario

SCRUM

Qué es SCRUM Scrum es un proceso en el que se aplican de manera regular  un conjunto de buenas prácticas  para  trabajar colaborativ...