11 octubre, 2010

Uso de RadioButtons en Java

Utilización de RadioButton
Conocido también como botón de opción o botón de radio es un tipo de widget utilizado en interfaces gráficas de usuario que permite elegir una sola opción de un conjunto predeterminado de estas.
Los botones de opción (botones de radio) se llaman así en referencia a los botones físicos que se usan en los radios para seleccionar estaciones preajustadas - cuando se presionaba uno de los botones, otro de los botones saltaba.

Es posible que, inicialmente, ninguno de los botones de opción en un grupo esté seleccionado. Este estado no puede restaurarse interactuando con el widget del botón de opción (pero es posible a través de otros elementos de la interfaz de usuario).

Un aspecto interesante de los botones de opción, cuando se utilizan en un formulario HTML, es que si no se marca ningún botón en un grupo, entonces no se pasa ningún par nombre-valor cuando se envía el formulario. Por ejemplo, para un grupo de botones de opción llamado Sexo, con las opciones de Masculino y Femenino, la variable Sexo no pasaría, ni siquiera con un valor en blanco.

Este es un ejemplo común de un RadioButton en donde sólo se permitirá seleccionar un elemento de la lista definida previamente por el Programador:
Bueno, ahora vamos al código, veamos que se debe hacer para crear uno de estos.
Imports Utilizados:
import javax.swing.ButtonGroup;
import javax.swing.JRadioButton;

Definir un RadioButton:
JRadioButton rbtn1=new JRadioButton("txt1",true);
JRadioButton rbtn2=new JRadioButton("txt2",false);
JRadioButton rbtn3=new JRadioButton("txt3",false);

Creación del Grupo de Botones:
ButtonGroup grupo1 = new ButtonGroup();
grupo1.add(rbtn1);
grupo1.add(rbtn2);
grupo1.add(
rbtn3);

La Clase que se utiliza se llama JRadioButton y donde la clase que nos permite crear un grupo donde "almacenaremos" nuestro botones es la ButtonGroup. Los parámetros que se pasan al momento de crearlo son el Texto que llevará y si estará seleccionado este ítem al momento de ejecutar nuestro programa.
Existen otras formas tanto de colocar el texto en un RadioButton como de configurar si este estará seleccionado por defecto, tales como:

rbtn1.setText("Texto");
rbtn1.setSelected(true);

En el caso de necesitar una validación podríamos hacerlo con un IF:

if(rbtn1.isSelected()==true)
{
System.out.print("Seleccionó opción 1");
}

Ejemplo de Ejecución de un RadioButton en Java:

Nota: Si deseas algún código en especial deja tu petición en algún comentario.

34 comentarios:

  1. Hola. disculpe como puedo hacer para llamar otra ventana con un radiobutton

    ResponderBorrar
  2. Hola, con respecto a tu pregunta la validación podría ser la siguiente:
    if(rbtn1.isSelected()==true)
    {
    Formulario f1 = new Formulario();
    }
    if(rbtn2.isSelected()==true)
    {
    Formulario2 f2 = new Formulario2();
    }

    Así se abrirían nuevas ventanas a partir de la selección que hayas hecho en el RadioButton.

    Saludos!

    ResponderBorrar
  3. como puedo hacer k al hacer click n el radio button aparesca una lista determinada en un combobox

    ResponderBorrar
    Respuestas
    1. Hola Jheimy, gracias por comentar, con respecto a tu duda, podrías basarte en este pedazo de código (ojo que no está optimizado pero cumple lo que me dices):

      Recuerda definir el número de JRadioButton que quieras y el JComboBox, todo lo necesario también lo detallas en el Constructor, ahora las funciones clave son estas:

      public void stateChanged(ChangeEvent e)
      {
      //Si el JRadioButton está seleccionado, entonces lleno el JComboBox con los siguientes elementos.
      if (radio1.isSelected())
      {
      combo1.removeAllItems();
      combo1.addItem("Radio1 Seleccionado");
      }

      if (radio2.isSelected())
      {
      combo1.removeAllItems();
      combo1.addItem("Radio2 Seleccionado");
      }

      if (radio3.isSelected())
      {
      combo1.removeAllItems();
      combo1.addItem("Radio3 Seleccionado");
      }
      }

      public void itemStateChanged(ItemEvent e)
      {
      if (e.getSource()==combo1)
      {
      String seleccionado=(String)combo1.getSelectedItem();
      setTitle(seleccionado);
      }
      }

      Borrar
  4. tengo un problema
    cuadno ponga la desicion no me aparece el .isSelected

    ResponderBorrar
    Respuestas
    1. Hola Juan, gracias por comentar, con respecto a tu duda, te aclaro como debes definir tu JRadioButton y como es la función para tomar una decisión:

      private JRadioButton radio1,radio2,radio3;

      private ButtonGroup bg;
      public FormularioRadioButton() {
      setLayout(null);
      bg=new ButtonGroup();
      radio1=new JRadioButton("Opcion1");
      radio1.setBounds(10,20,100,30);
      radio1.addChangeListener(this);
      add(radio1);
      bg.add(radio1);
      radio2=new JRadioButton("Opcion2");
      radio2.setBounds(10,70,100,30);
      radio2.addChangeListener(this);
      add(radio2);
      bg.add(radio2);
      radio3=new JRadioButton("Opcion3");
      radio3.setBounds(10,120,100,30);
      radio3.addChangeListener(this);
      add(radio3);
      bg.add(radio3);
      }

      public void stateChanged(ChangeEvent e) {
      if (radio1.isSelected()) {
      //Hacer lo que tu quieras
      }
      if (radio2.isSelected()) {
      //Hacer lo que tu quieras
      }
      if (radio3.isSelected()) {
      //Hacer lo que tu quieras
      }
      }

      Borrar
  5. Hola.
    Cómo se puede hacer para que al elegir una opción con radio button en un formulario en otro formulario me salga la opción en un cuadro de texto?

    ResponderBorrar
    Respuestas
    1. Hola Jamilet, con respecto a tu duda, te planteo el siguiente escenario con el que puedes cumplir de manera rápida lo que deseas:

      Vamos a pasar un dato (String) entre jFrame1 y jFrame2 en Netbeans.

      Ahora dentro del JRadioButton, donde controlas las opciones seleccionadas pondrías un código similar a este:

      JFrame2 son1 = new JFrame2();
      son1.setVisible(true);

      Y para lograr enviar la opción seleccionada al otro formulario en la caja de texto, se pondría algo así:

      son1.txtRespuesta.setText(radioBtn1.getText());

      Hasta ahí nada fuera de lo común, pero por el momento verás que en el IDE se te muestra un Error, es porque aún no terminamos los cambios.

      Vamos al JFrame2, seleccionamos la caja de texto donde aparecerá la opción del JRadioButton seleccionada, presionamos click derecho y seleccionamos "Propiedades", aparecerá una ventana
      con varias pestañas, vamos a la que diga "código" o "code", dependiendo del idioma de tu Netbeans.

      Y cambiamos una de las propiedades, aquella que dice: "Variable Modifiers", modificamos el valor seleccionado que es "private" con "public", con esto ya podrás acceder desde el JFrame1 al JTextField del JFrame2 y colocar el resultado de la opción seleccionada, el código que ya lo probé es algo así:

      public void stateChanged(ChangeEvent e)
      {
      son1.setVisible(true);
      if (radio1.isSelected() && radio1.isEnabled()) {
      radio1.setEnabled(false);
      radio2.setEnabled(true);
      radio3.setEnabled(true);
      son1.lblResult.setText(radio1.getText());
      }
      if (radio2.isSelected() && radio2.isEnabled()) {
      radio1.setEnabled(true);
      radio2.setEnabled(false);
      radio3.setEnabled(true);
      son1.lblResult.setText(radio2.getText());
      }
      if (radio3.isSelected() && radio3.isEnabled()) {
      radio1.setEnabled(true);
      radio2.setEnabled(true);
      radio3.setEnabled(false);
      son1.lblResult.setText(radio3.getText());
      }

      Agregué algunas validaciones para que no se abra más de una instancia y controlar de mejor forma este código, es algo breve, se puede optimizar, espero que te sirva.

      Saludos! =)

      Borrar
  6. Hola y no sabes si se podrá, que al seleccionar un jcombobox este me cargue un jtable con diferentes encabezados

    ResponderBorrar
    Respuestas
    1. Hola Jonathan, si se puede realizar lo que preguntas, es algo similar a la respuesta del penúltimo comentario, solo que en vez de mandar los datos a otro JFrame, cambias los datos del encabezado de la Tabla, puedes basarte en los ejemplos que se publicaron anteriormente, suerte!!

      Saludos! =)

      Borrar
  7. hola , quisiera saber , como abrir un formulario nuevo desde un radiobutton

    ResponderBorrar
    Respuestas
    1. Hola, con respecto a tu pregunta puede ser así:
      if(rbtn1.isSelected()==true)
      {
      Formulario f1 = new Formulario();
      }
      if(rbtn2.isSelected()==true)
      {
      Formulario2 f2 = new Formulario2();
      }

      Borrar
  8. como hago para que cuando elija uno de los radio botones me deje activos solo los botones que necesito (en una calculadora).
    necesito esto para manejar operaciones con binarios, decimal y hexa y obviamente en los tres sistemas no utilizan los mismos botones

    ResponderBorrar
    Respuestas
    1. Hola Daniel,con respecto a tu pregunta puede ser así:
      if(rbtnOctal.isSelected()==true)
      {
      btnOperacionDecimal.setEnabled(false);
      btnOperacionHexadecimal.setEnabled(false);
      }

      Y de esa manera haces para cada botón que uses en la calculadora.

      Espero que te sirva, saludos!!

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

      Borrar
    3. Por eso mismo.....debes deshabilitar cada uno de los botones.....lo que te puse arriba es el código de ejemplo, la base con la quede debes hacer eso para todos los botones que utilices.

      Saludos!

      Borrar
  9. tengo esto: decimal.setSelected(true);
    eso solo me pone el punto en el radiobutton, pero no me deja haciendo la accion por defecto, como hago?

    ResponderBorrar
    Respuestas
    1. Haber, con esa sentencia lo que haces es que el JRadioButton de nombre "decimal" se coloque como seleccionado, pero no estás validando nada, no usas un IF, cómo deseas que el usuario controle la aplicación si tu le estás mandando esa sentencia por dentro, a menos que "decimal" sea la opción seleccionada por default, ya te explique como debes hacer tu código, acá de nuevo te explico con tu código adicional:

      //Con esto indicamos que se seleccione la opción decimal en el Conjunto de JRadioButtons
      decimal.setSelected(true);

      //Debemos validar de alguna forma qué opción está seleccionada, eso puede hacerse a través de un simple evento o llamando a una función simple hecha por ti, como prefieras, la cual deberá tener un código similar a este:
      //Si octal está seleccionado entonces deshabilitar botones para funciones decimal y hexadecimal
      if(octal.isSelected()==true)
      {
      //Estos son botones de las operaciones de otras bases que como no están seleccionadas serán deshabilitados.
      SumaDecimal.setEnabled(false);
      SumaHexadecimal.setEnabled(false);
      }

      Saludos!

      Borrar
    2. necesito que cuando haga clic en un boton me haga la grafica del seno (con plano cartesiano), pero no se como hacer la grafica y el llamado del metodo cuando haga clic, de antemano muchas gracias

      Borrar
    3. Hola Daniel,
      Con respecto a eso, al presionar el botón debes llamar a una función que ejecute un código similar a este, cabe resaltar que es el código base para hacer una gráfica del seno.

      import java.awt.*;
      import java.applet.Applet;

      public class Seno extends Applet {
      int x0,xN,y0,yN;
      double xmin,xmax,ymin,ymax;
      int apAncho,apAlto;

      public void init() {
      Dimension d = size();
      apAncho = d.width;
      apAlto = d.height;

      x0 = y0 = 0;
      xN = apAncho-1;
      yN = apAlto-1;
      xmin = -10.0;
      xmax = 10.0;
      ymin = -1.0;
      ymax = 1.0;
      }

      public void paint( Graphics g ) {
      double x1,y1,x2,y2;
      int j1,j2;

      j1 = ValorY( 0 );
      for( int i=0; i < apAncho; i++ )
      {
      j2 = ValorY( i+1 );
      g.drawLine( i,j1,i+1,j2 );
      j1 = j2;
      }
      }

      private int ValorY( int valor ) {
      double x,y;
      int retorno;

      x = (valor * (xmax-xmin) / (apAncho-1)) + xmin;
      y = Math.sin( x );
      retorno = (int)( (y-ymin) * (apAlto-1) / (ymax-ymin) );
      retorno = apAlto - retorno;

      return( retorno );
      }
      }

      Borrar
  10. como hago para ir almacenando en una lista loq ue seleccione en las opciones de radiobotton

    ResponderBorrar
    Respuestas
    1. Hola Rafa, para lo que preguntas, un código base sería este:

      if(rbtn1.isSelected()==true)
      {
      //Crea tu lista aquí y agrega el elemento seleccionado del JRadioButton, para validar el elemento seleccionado es el IF, y para agregar a la lista deberías usar la sentencia:
      radio1.getText();
      }

      Nota Final: Puedes usar un ArrayList y el código que usarías sería así:

      ArrayList miLista = new ArrayList();
      miLista.add(radio1.getText());

      Saludos!!

      Borrar
  11. Muchas gracias por la información, me ha ayudado bastante.

    ResponderBorrar
    Respuestas
    1. Gracias Aura por comentar, me alegra que te haya servido!! =)

      Saludos!

      Borrar
  12. Galo primero deja agradecerte porq gracias a este blog pude realizar parte de mi proyecto

    ResponderBorrar
    Respuestas
    1. Muchas gracias Bryan, hace tiempos que no revisaba los comentarios y es bueno saber que mi blog te ayudó a realizar tu proyecto. =)

      Borrar
  13. Hola, tengo un proyecto en el cual al hacer clic en un Radio button me aparece información en un area de texto ¿como puedo cambiar el font al texto?

    ResponderBorrar
    Respuestas
    1. Hola, que tal, para cambiar la letra es posible de la siguiente manera:
      label = new JLabel("Hola Mundo!");
      label.setFont(new Font("Calibri", Font.PLAIN, 24));

      Borrar
  14. Hola muchas gracias
    Con esos tics me has aclarado una duda que tenía.

    ResponderBorrar
    Respuestas
    1. Hola Lirio, gracias por comentar, me alegra que te haya sido de ayuda la explicación.

      Saludos! =)

      Borrar
  15. se puede crear Radio Button en tiempo de ejecucion?
    referente a q tengo q hacer una encuestador el cual puede agregar "X" pregunta y despues agregar sus respuestas q puede ser desde 2 hasta 100 por ejemplo pero tiene que utilizar radio button...

    ResponderBorrar
    Respuestas
    1. Hola coxx06, si se puede, tienes que hacerlo con condicionales y puedes usar un arreglo de Radio Buttons también, hay muchas formas de resolver eso, espero que te sirva.

      Suerte!! =)

      Borrar
  16. Hola buenas, como hago para que no me deje vacía la fila de la tabla? al momento que ejecuto la aplicación si no se selecciono nada me manda el mensaje que debo seleccionar una opción, pero sigue de largo y me deja en blanco la fila de la tabla.

    String Sexo ="";
    if(rbmasculino.isSelected()){
    Sexo= "Masculino";
    }
    if(rbfemenino.isSelected()){
    Sexo= "Femenino";
    }
    else{
    JOptionPane.showMessageDialog(rootPane, "Debe seleccionar una opcion para el sexo");
    }

    ResponderBorrar
    Respuestas
    1. Hola Jhonny, con respecto a tu pregunta, te pido que por favor subas más detalles de tu código, si es posible un enlace a Github con tu repositorio o una imagen para entender a qué tabla te refieres, aunque lo más probable que deberías hacer en una situación así es validar que si el String Sexo es diferente de "Masculino" y diferente de "Femenino", que no le deje pasar al programa y no se ejecuten las sentencias siguientes, espero que te sirva, es todo lo que puedo decir con esa poca información.

      Saludos!! =)

      Borrar