Aquí tienes una imagen de una aplicación que tiene dos checkboxes:
Intenta esto:
- Compila y ejecuta la aplicación. El fichero fuente está en CheckboxDemo.java.
Puedes ver la página Empezando con Swing si necesitas ayuda.- Pulsa el botón 2.
El botón 2 se selecciona y el botón 1 permanece selecionado.- Mira el mesaje mostrado en la salida estándard.
Esta aplicación registra un oyente para cada tipo de evento que un botón puede enviar. Cada vez que recibe un evento, la aplicación muestra un mensaje que describe el evento.- Pulsa de nuevo el botón 2, y mira los mensajes mostrados en la salida estándard.
Un checkbox genera un evento de ítem y un evento de acción por cada pulsación,. Normalmente, lo único que necesita un manejador de eventos de checkboxes es un oyente de ítem. Si tu prefieres utilizar el API asociado con los eventos acción, puedes utilizar un oyente de acción en su lugar. No se necesita implementar un oyente de cambio a menos que tu programa necesite saber en todo momento los cambios de apariencia del botón.
Abajo tienes el códio de CheckboxDemo.java que crea loa checkboxes del ejemplo anterior y reacciona a los cliks.
//en el código de inicialización:
// Crear los botones.
JCheckbox firstButton = new JCheckbox(first);
firstButton.setKeyAccelerator('1');
firstButton.setActionCommand(first);
firstButton.setSelected(true);
JCheckbox secondButton = new JCheckbox(second);
secondButton.setKeyAccelerator('2');
secondButton.setActionCommand(second);
// Registra un oyente para los checkboxes.
CheckboxListener myListener = new CheckboxListener();
firstButton.addActionListener(myListener);
firstButton.addChangeListener(myListener);
firstButton.addItemListener(myListener);
secondButton.addActionListener(myListener);
secondButton.addChangeListener(myListener);
secondButton.addItemListener(myListener);
. . .
class CheckboxListener implements ItemListener, //Sólo es necesario el tipo
ActionListener, //sólo por curiosidad
ChangeListener { //sólo por curiosidad
public void itemStateChanged(ItemEvent e) {
System.out.println("ItemEvent received: "
+ e.getItem()
+ " is now "
+ ((e.getStateChange() == ItemEvent.SELECTED)?
"selected.":"unselected"));
}
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 stateChanged(ChangeEvent e) {
System.out.println("ChangeEvent received from: "
+ e.getSource());
}
}
Puedes ver la página How to Use Buttons para más información sobre el API de AbstractButton del que desciende JCheckbox. El único API definido por JCheckbox que te gustará utilizar son los constructores. JCheckbox define siete constructores: