sábado, 14 de abril de 2012

2. Botones de opción (RadioButton)


Los botones de opción RadioButton se utilizan para seleccionar solo un elemento de un conjunto de elementos. La diferencia principal de un CheckBox y un RadioButton radica principalmente en ésta característica, ya que un conjunto de RadioButton solo puedes seleccionar un elemento, mientras que, en un conjunto de CheckBox puedes seleccionar uno, varios o todos los elementos.

Otra característica importante es que el RadioButton se identifica generalmente como listas con círculos como podrás ver a continuación. Para agregarlos a nuestro proyecto de ejemplo realizar los siguientes pasos:
1. Realiza un nuevo proyecto.

2. En la ventana principal debes añadir lo siguiente:

a. Un botón “Aceptar” llamado btnAceptar.
b. Una etiqueta con borde llamada etiResultado.

3. Añade un panel. Un panel es una zona rectangular que puede contener elementos (botones, etiquetas, etc) La forma de poner un panel es a través del objeto JPanel.

Seleccionar JPanel de la paleta de Swing
4. Una vez añadido el panel en el JFrame, le pondremos un borde para poder localizarlo fácilmente. Debes hacer lo siguiente:

a. Selecciona el panel que has añadido.
b. Activa la propiedad Border (botón con tres puntos)
c. Busca el tipo de borde llamado TitledBorder (borde con título) y pon el título colores.

Agregar propiedades al JPanel
5. Tu ventana debe quedar más o menos así:
Ventana con JPanel, botón y etiqueta
6. Ahora debes añadir tres botones de opción (botones de radio) dentro del panel. Estos botones son objetos del tipo JRadioButton.


JRadioButton en la paleta Swing
7. Añade tres JRadioButton y cambia el texto de ellos, de forma que aparezca “Rojo”, “Verde” y “Azul”.

8. Debe cambiar el nombre de cada uno de ellos. Se llamarán: optRojo, optVerde, optAzul.

9. La ventana tendrá el siguiente aspecto cuando termine:

Ventana con JPanel, 3 RadioButton, botón y etiqueta

10. Si ejecuta el programa, observará que pueden seleccionarse varios colores a la vez. Esto no es interesante, ya que los botones de opción se usan para activar solo una opción entre varias.


11. Hay que hacer que solo un botón de opción pueda estar seleccionado a la vez. Para ello, debe añadir un nuevo objeto. Realice los siguientes pasos:

a. Añada un objeto del tipo ButtonGroup al formulario. ¡Atención! Este objeto es invisible, y no se verá en el formulario, sin embargo, lo podréis ver en el Inspector, en la parte de “Otros Componentes”:

ButtonGroup
b. Tienes que darle un nombre al ButtonGroup. El nombre será “grupoColores”.
c. Ahora, hay que conseguir que los tres botones pertenezcan al mismo grupo. Es decir, que pertenezcan al grupo grupoColores.
d. Selecciona el botón de opción optRojo y cambia su propiedad buttonGroup, indicando que pertenece al grupo colores (observa la imagen):




e. Haz lo mismo con los botones optVerde y optAzul.


12. Acabas de asociar los tres botones de opción a un mismo grupo. Esto produce que solo una de las tres opciones pueda estar activada. Pruébelo ejecutando el programa.


13. Ahora interesa que la opción “Rojo” salga activada desde el principio. Una forma de hacer esto es programando en el “Constructor” lo siguiente:

optRojo.setSelected(true);

El método setSelected hace que se pueda activar o desactivar un botón de opción.

Prueba el programa. Observa como la opción Rojo está activada inicialmente.


14. El programa no está terminado aún. Interesa que cuando el usuario pulse el botón Aceptar, en la etiqueta aparezca el color elegido. Para ello, en el actionPerformed del botón Aceptar programe lo siguiente:

   String mensaje="Color elegido: ";
        
        if (optRojo.isSelected()) {
            mensaje=mensaje+"Rojo";
        } else if (optVerde.isSelected()) {
            mensaje=mensaje+"Verde";
        } else if (optAzul.isSelected()) {
            mensaje=mensaje+"Azul";
        }
        
        etiResultado.setText(mensaje);
   


15. Observa el código. En él se hace lo siguiente:

a. Se crea una variable de cadena llamada mensaje.
b. En esa variable se introduce el texto “Color elegido:  “
c. Luego se comprueba que opción está seleccionada, usando el método isSelected de los botones de opción. Este método te dice si un botón está seleccionado o no.
d. Según la opción que esté seleccionada, se añade un texto u otro a la cadena mensaje.
e. Finalmente se muestra la cadena mensaje en la etiqueta etiResultado.


16. Ejecute el programa. Seleccione por ejemplo la Verde. Al pulsar Aceptar el resultado debe ser el siguiente:




CONCLUSIÓN

Los botones de opción, también llamados botones de radio (JRadioButton) se usan cuando quieres que el usuario pueda elegir una opción de entre varias.

Es interesante que los botones de radio aparezcan dentro de un panel JPanel. Se recomienda colocar un borde al panel.

Es totalmente necesario añadir un objeto del tipo ButtonGroup, y hacer que los botones de radio pertenezcan a dicho grupo. En caso contrario, será posible activar varios botones de opción a la vez.


51 comentarios:

  1. y amm una pregunta como ya teniendo mi grupo de botones con un boton pueda deseleccionar todos los radio button para que me vuelva a pedir la opion?

    ResponderEliminar
    Respuestas
    1. Hola Frank, supongamos que al boton que mencionas lo llames "Limpiar". Entonces tendrás que hacer lo siguiente:
      1. En el actionPerformed de tu boton "Limpiar" tendras que indicarle que el RadioButton no debe estar seleccionado con la siguiente linea de ejemplo:

      optRojo.setSelected(false);

      Lo cual indica que al RadioButton llamado optRojo le estas dando propiedades de seleccion (.setSelected) con valor falso (false).
      Esta instruccion la debes repetir para todos los RadioButton que hayas agregado en el ButtonGroup.

      En este ejemplo tambien es conveniente que al dar clic al boton "Limpiar" tambien se reinicie el contenido de la etiqueta con la siguiente instruccion:

      etiResultado.setText(null);

      Espero haberte ayudado, saludos.

      Eliminar
    2. Luis Edwin Aa disculpa que te corrija, pero para limpiar la selección de todos los RadioButton en un grupo se utiliza el comando "clearSelection();". Utilizando tu ejemplo esto queda:
      grupoColores.clearSelection();

      Eliminar
    3. Gracias amigo me sirvio mucho tu ayuda (Y)

      Eliminar
    4. tiene razon victor ivan, no me funcionó utilizando el boolean

      Eliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. Gracias por el aporte me sirvio mucho.. :D

    ResponderEliminar
  4. sencillo y fácil, ^^
    gracias me ha servido ^^

    ResponderEliminar
  5. i opcion jpanel no lo tengo ... ayudenmeee

    ResponderEliminar
  6. gracias!!! peron quisiera saber como hago para limpiar mis radiobuttons

    ResponderEliminar
    Respuestas
    1. Si están en un grupo utiliza este comando:
      nombregrupo.clearSelection();

      Para un solo RadioButton en especifico utiliza:
      nombreRadioButton.setSelected(false);

      Eliminar
  7. Buenos dias..
    a mi no me aparece la opcion de buttongroup.. como se hace en ese caso?

    ResponderEliminar
  8. Profiras dercirme para qe sirven cada unos de los controles ... ¿?

    ResponderEliminar
  9. dola, como hago para tener la opción del bottongroup, en mi paleta no me aparece.
    tengo instalado el netbeans 7.2

    ResponderEliminar
  10. Hola necesito un programa en NetBeans en un formulario..que tenga una lista.cola.pila..con sus conceptos basicos ...gracias

    ResponderEliminar
  11. gracias hermano me sirvió de mucho tu aporte :D

    ResponderEliminar


  12. Gracias ! Me ayudo como referencia. :) !!!

    ResponderEliminar
  13. ola saludos ;
    Alguien me podría ayudar. mi problema es que tengo varios radio button
    radio button1
    radio button2
    radio button3
    pero solo kiero k se sellecione uno a la vez que no me permita selecionar 2

    ResponderEliminar
  14. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  15. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  16. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  17. ButtonGroup grupo= new ButtonGroup ();
    grupo.add(radio1);
    grupo.add(radio2);
    grupo.add(radio3);
    agrega el grupo de botonoes y ahi se añade cada radiobuton al grupo y te selecionara uno

    ResponderEliminar
  18. ButtonGroup grupo= new ButtonGroup ();
    grupo.add(radio1);
    grupo.add(radio2);
    grupo.add(radio3);
    agrega el grupo de botonoes y ahi se añade cada radiobuton al grupo y te selecionara uno

    ResponderEliminar
  19. ButtonGroup agrega= new ButtonGroup ();
    grupo.add(radio1);
    grupo.add(radio2);
    grupo.add(radio3);
    agrega el grupo de botonoes y ahi se añade cada radiobuton al grupo y te selecionara uno

    ResponderEliminar
  20. gracias por tu aporte , me ha funcionado perfectamnte ,saludos

    ResponderEliminar
  21. Hola:
    Alguien me podría ayudar,
    Mi problema es que estoy trabajando con formularios utilizando Netbeans y tengo 4 formularios pero no se como agruparlos mediante un solo botón y que a el momento presionar el botón me guarde la información en una base de datos.
    Ojala alguien me pueda ayudar se los agradecería.

    ResponderEliminar
    Respuestas
    1. Amigo, no seria mas fácil agrupar todo en un solo formulario? No le veo el caso a tener 4 y querer que todos se aaccioen con un solo botón.

      Eliminar
  22. y como hago para seleccionar cual de los dos botones ha seleccionado (en mi caso genero, masculino/femenino), ¿como lo translado ese valor a un arrayList que uso para mostrar en una tabla?


    private void button_enviarActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    Persona p = new Persona();
    p.setNombre(text_nombre.getText());
    p.setEdad(text_edad.getText());
    p.setCiudad((String) combo_ciudad.getSelectedItem());
    p.setSexo(grupo.isSelected()); ?????????
    personasList.add(p);

    modelo.addRow(new Object[]{p.getNombre(), p.getEdad(), p.getCiudad(), p.getSexto()});
    }

    ResponderEliminar
  23. Solucionado,
    if (masculino.isSelected())
    p.setSexo("Masculino");
    else
    p.setSexo("Femenino");

    ResponderEliminar
    Respuestas
    1. Hola, tengo una duda muy similar a la tuya, quisiera saber si me podrías ayudar.
      Muchas gracias desde ya.

      Eliminar
  24. TENGO 4 BOTONES PARA UNA ELECCIÓN DE COLORES
    HAY 100 PERSONAS Y CADA UNA DE ELLA ESCOJE UN COLOR
    COMO HAGO PARA QUE ME MUESTRE CUANTOS PERSONAS ELIGIERON EL VERDE CUANTAS EL AZUL CUANTAS EL ROJO Y CUANTAS EL AMARILLO Y QUE ME MUESTRE CUAL COLOR FUE EL MAS ELEGIDO ... SI ME PUEDEN AYUDAR CON ESO . SE LOS AGRADESCO

    ResponderEliminar
  25. Como haria para obligar al usuario a que eliga cuando menos un radiobutton?

    ResponderEliminar
  26. Tengo 4 Radiobottons y cuando seleccionas una opcion se guarda en la base de datos pero cuando hago una consulta como hago para que esa opcion sea mostrada en el radiobotton???

    ResponderEliminar
  27. Tengo 4 Radiobottons y cuando seleccionas una opcion se guarda en la base de datos pero cuando hago una consulta como hago para que esa opcion sea mostrada en el radiobotton???

    ResponderEliminar
  28. Buenas, tengo 4 raddiobuttons dentro den un ButtonsGroup, como hago para poder seleccionar 2 a la azar?, solo me permite seleccionar 1.. gracias :D

    ResponderEliminar
  29. Hola qué tal si quiero que al seleccionar una radiobutton me pida una contraseña como le ago

    ResponderEliminar
  30. algien me puede ayudar a regresar datos de una tabla a un radio button

    ResponderEliminar
  31. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  32. Muchisimas gracias me ayudaste mucho

    ResponderEliminar
  33. Hola mucho gusto tengo algo parecido pero estoy haciendo un pequeño proyecto para una materia y ando haciendo un punto de ventas y tengo creado 2 radiobutton pero se supono que solo se puede seleccionar uno y con base en eso se hace una operacionn pero quisiera saber como hacer para tomar los valores de los radiobuttons espero que me puedan ayudar.

    ResponderEliminar
  34. Gracias me pareció muy útil claro y directo.

    ResponderEliminar
  35. me salio bien al ejecutarlo gracias, pero no si al alguien me puede ayudar con un programa de una taqueria que me de el precio y el precio del descuento por día usando (combobox, spinner, slider, text area y radiobutton por favor antes del 7 de diciembre 🙏

    ResponderEliminar