Cómo usar la Clase RadioButton

Los Botones de Radio son grupos de botones en los que, por convención, sólo uno de ellos puede estar seleccionado. Swing soporta botones de radio con las clases JRadioButton y ButtonGroup. Para poner un botón de radio en un menú, se utiliza la clase JRadioButtonMenuItem. Otras formas de presentar una entre varias opciones son los combo boxes y las listas. Los botones de radio tienen un aspecto similar a los check boxes, pero, por convención, los checkboxes no tienen límites sobre cuantos ítems pueden estar seleccionados a la vez.

Como JRadioButton desciende de AbstractButton, los botones de radio Swing tienen todas las caracterísitcas de los botones normales. como se explicó en Cómo usar Buttons. Por ejemplo, se puede especificar la imagen mostrada por un botón de radio.


Nota: En Swing 1.0.2, los botones ignoran sus mnemónicos (teclas aceleradoras). Este error se ha corregido en Swing 1.0.3.
Aquí podemos ver una imagen de una aplicación que utiliza cinco botones de radio para elegir qué tipo de mascota mostrar:

Intenta esto:
  1. Compila y ejecuta la aplicación. El fichero fuente es RadioButtonDemo.java. También necesitarás cinco ficheros de imágenes: Bird.gif, Cat.gif, Dog.gif, Rabbit.gif, y Pig.gif.
  2. Pulsa el botón 'Dog' o pulsa Alt-d.
    El botón 'Dog' de selecciona, lo que hace que el botón 'Bird' sea deselecciondo. La imagen cambia de un pájaro a un perro. Esta aplicación tiene un oyente de action que escucha todos los botones de radio. Cada vez que el oyente de action recibe un evento, la aplicación muestra la imagen del botón de radio que ha sido seleccionado.

Cada vez que el usuario pulsa un botón de radio, (incluso si ya estaba seleccionado), el botón dispara un evento action. También ocurren uno o dos eventos item -- uno desde el botón que acaba de ser seleccionado, y otro desde el botón que ha perdido la selección (si existía). Normalmente, las pulsaciones de los botones de radio se manejan utilizando un oyente de action.

Abajo está el código de RadioButtonDemo.java que crea los botones de radio en el ejemplo anterior y reaccióna ante las pulsaciones:

//In initialization code:
    // Create the radio buttons.
    JRadioButton birdButton = new JRadioButton(birdString);
    birdButton.setMnemonic('b');
    birdButton.setActionCommand(birdString);
    birdButton.setSelected(true);

    JRadioButton catButton = new JRadioButton(catString);
    catButton.setMnemonic('c');
    catButton.setActionCommand(catString);



    JRadioButton dogButton = new JRadioButton(dogString);
    dogButton.setMnemonic('d');
    dogButton.setActionCommand(dogString);

    JRadioButton rabbitButton = new JRadioButton(rabbitString);
    rabbitButton.setMnemonic('r');
    rabbitButton.setActionCommand(rabbitString);

    JRadioButton teddyButton = new JRadioButton(teddyString);
    teddyButton.setMnemonic('t');
    teddyButton.setActionCommand(teddyString);

    // Group the radio buttons.
    ButtonGroup group = new ButtonGroup();
    group.add(birdButton);
    group.add(catButton);
    group.add(dogButton);
    group.add(rabbitButton);
    group.add(teddyButton);

    // Register a listener for the radio buttons.
    RadioListener myListener = new RadioListener();
    birdButton.addActionListener(myListener);
    catButton.addActionListener(myListener);
    dogButton.addActionListener(myListener);
    rabbitButton.addActionListener(myListener);
    teddyButton.addActionListener(myListener);
...
class RadioListener implements ActionListener ... {
    public void actionPerformed(ActionEvent e) {
        picture.setIcon(new ImageIcon("images/" 
                                      + e.getActionCommand() 
				      + ".gif"));
    }
}
Para cada grupo de botones de radio, se necesita crear un ejemplar de ButtonGroup y añadirle cada uno de los botones de radio. El ButtonGroup tiene cuidado de desactivar la selección anterior cuando el usuario selecciona otro botón del grupo.

Generalmente se debería inicializar un grupo de botones de radio para que uno de ellos esté seleccionado. Sin embargo, el API no fuerza esta regla -- un grupo de botones de radio puede no tener selección inicial. Una vez que el usuario hace una selección, no existe forma para desactivar todos los botones de nuevo.

El API Radio Button

Puedes ver El API Button para informaión sobre el API de AbstractButton del que descienden JRadioButton y JRadioButtonMenuItem. Los métodos de AbstractButton que más se utilizan son setMnemonic, addItemListener, setSelected, y isSelected. Las piezas más utilizadas del API de Radio Button se dividen en dos grupos:

Métodos y Constructores más utilizados de ButtonGroups
Método Propósito
ButtonGroup() Crea un ejemplar de ButtonGroup.
void add(AbstractButton)
void remove(AbstractButton)
Añade un botón a un grupo, o elimina un botón de un grupo.

Constructores de Radio Button
Constructor Propósito
JRadioButton(String)
JRadioButton(String, boolean)
JRadioButton(Icon)
JRadioButton(Icon, boolean)
JRadioButton(String, Icon)
JRadioButton(String, Icon, boolean)
JRadioButton()
Crea un ejemplar de JRadioButton. El argumento string especifica el texto, si existe, que debe mostrar el botón de radio. Similarmente, el argumento, Icon especifica la imagen que debe usar en vez la imagen por defecto de un botón de radio para el aspecto y comportamiento. Si se especifica true en el argumento booleano, inicializa el botón de radio como seleccionado, sujeto a la aprovación del objeto ButtonGroup. Si el argumento booleano esta ausente o es false, el botón de radio está inicialmente deseleccionado.
JRadioButtonMenuItem(String)
JRadioButtonMenuItem(Icon)
JRadioButtonMenuItem(String, Icon)
JRadioButtonMenuItem()
Crea un ejemplar de JRadioButtonMenuItem. Los argumentos se interpretan de la misma forma que los de los constructores de JRadioButton.

Ejemplos que utilizan Radio Buttons

Los siguientes ejemplos utilizan botones de radio como botones o como ítems de menús.

Ejemplo Dónde se Describe Notas
RadioButtonDemo.java Esta página. Utiliza botones de radio para dererminar cual de cinco imágenes se debe mostrar.
DialogDemo.java Cómo crear Diálogos Contiene varios conjuntos de botones de radio, que utiliza para determinar qué diálogo desplegar.
MenuDemo.java Cóm usar Menús Contiene botones de radio como ítems de menú.


Ozito