Cómo utilizar Botones de Radio

Los botones de Radio son grupos de botones en los que sólo uno de ellos puede ser seleccionado a la vez. La versión Swing soporta botones de radio con las clases JRadioButton y ButtonGroup.

Como JRadioButton desciende de AbstractButton, los botones de radio de Swing tienen las caracterísitcas normales de los botones, como se explica en la página Cómo utilizar Botones. Por ejemplo, puedes especificar el texto (si lo hay) y la imagen en un botón de radio.

Aquí tienes un gráfico de una aplicación que tiene dos botones de radio:


Intenta esto:
  1. Compila y ejecuta la aplicación. El fichero fuente está en RadioButtonDemo.java.
    Puedes ver la página Empezar con Swing si necesitas ayuda.
  2. Pulsa el botón 2.
    El botón 2 se selecciona, lo que hace que el botón 1 se deseleccione.
  3. Mira los mensajes mostrados en la salida estándard.
    Esta aplicación registra un oyente para cada tipo de evento que puede enviar un botón -- action, change e ítem. Cada vez que recibe un evento la aplicación muestra un mensaje que describe el evento.
  4. Pulsa de nuevo el botón 1, y mira los mensajes mostrados en la salida estándard.

Normalmente, lo único que necesita un manejador de eventos de un botón de radio es un oyente de action. Puedes utilizar un oyente de ítem en su lugar, si sólo estás monitorizando los cambios de estado, en vez de la propia acción. No se necesita implementar un oyente de cambio a menos que necesites saber en cada momento si la apariencia del botón ha cambiado.

Abajo tienes el código de RadioButtonDemo.java que crea los botones de radio del ejemplo anterior y reacciona a los clicks.

//En el código de inicialización:
    // Crear los botones.
    JRadioButton firstButton = new JRadioButton(first);
    firstButton.setKeyAccelerator('1'); 
    firstButton.setActionCommand(first);
    firstButton.setSelected(true);

    JRadioButton secondButton = new JRadioButton(second);
    secondButton.setKeyAccelerator('2'); 
    secondButton.setActionCommand(second);

    // Agrupa los botones de radio.
    ButtonGroup group = new ButtonGroup();
    group.add(firstButton);
    group.add(secondButton);

    // Registra un oyente para los botones de radio.
    RadioListener myListener = new RadioListener();
    firstButton.addActionListener(myListener);
    firstButton.addChangeListener(myListener);
    firstButton.addItemListener(myListener);
    secondButton.addActionListener(myListener);
    secondButton.addChangeListener(myListener);
    secondButton.addItemListener(myListener);
. . .
class RadioListener implements ActionListener, ChangeListener, ItemListener {  
    public void actionPerformed(ActionEvent e) {
        String factoryName = null;

        System.out.print("ActionEvent received: ");
        if (e.getActionCommand() == first) {
    	    System.out.println(first + " pressed.");
        } else {
    	    System.out.println(second + " pressed.");
        }
    }

    public void itemStateChanged(ItemEvent e) {
        System.out.println("ItemEvent received: " 
    		           + e.getItem()
    		           + " is now "
    		           + ((e.getStateChange() == ItemEvent.SELECTED)?
    			      "selected.":"unselected"));
    }

    public void stateChanged(ChangeEvent e) {
        System.out.println("ChangeEvent received from: "
    		           + e.getSource());
    }
}
Puedes ver la página Cómo utilizar Botones para más información sobre el API de AbstractButton del que desciende JRadioButton. JRadioButton define siete constructores:

Los argumentos son:

String
Especifica el texto que debería mostrar el botón de radio.
Icon
Especifica la imagen que debería mostrar el botón de radio. A menos que se especifique una imagen, la máquina virtual utilizará las imágenes predefinidas.
boolean
Especifica si el botón de radio está seleccionado. Por defecto es false (no seleccionado).

Para cada grupo de botones de radio, necesitas crear un ejemplar de ButtonGroup y añadirle cada uno de los botones de radio. El ButtonGroup asegura que sólo uno de los botones de grupo esté seleccionado. Aquí tienes los métodos y constructores de ButtonGroup:

ButtonGroup()
Crea un ejemplar de ButtonGroup.
add(AbstractButton)
Añade al grupo el botón especificado.
remove(AbstractButton)
Elimina el botón especificado del grupo.


Ozito