2011-02-04 13 views
8

Eso es todo. Necesito crear un ButtonGroup que permita seleccionar una opción o, si el usuario hace clic en la opción seleccionada, anular la selección del elemento (no se seleccionará nada) y, por supuesto, capturar el evento para hacer algo.¿Cómo crear ButtonGroup de JToggleButton's que permite deseleccionar la opción actual?

+2

que podría no ser intuitivo para el usuario. ¿Has pensado en hacer una opción para representar el estado/elección que correspondería a la anulación? –

Respuesta

9

Sólo en caso de enlace de Jeff se rompe en el futuro, aquí es lo que se describe a continuación: necesita subclase ButtonGroup para permitir que un no-selección, y añadir sus botones para esta buttongroup.

public class NoneSelectedButtonGroup extends ButtonGroup { 

    @Override 
    public void setSelected(ButtonModel model, boolean selected) { 
    if (selected) { 
     super.setSelected(model, selected); 
    } else { 
     clearSelection(); 
    } 
    } 
} 
+1

O una clase interna anónima será suficiente, por ejemplo, 'ButtonGroup myGroup = new ButtonGroup() {/ * code from above * /};' – captainroxors

0

Capture the event para hacer algo. También haz lo siguiente.

@Override 
public void actionPerformed(ActionEvent e) { 
    ((JToggleButton)e.getSource()).setSelected(false); 
} 

EDIT: Pero no hay ButtonGroup involucrados.

0

Solución para java pre 1,6

public class NoneSelectedButtonGroup extends ButtonGroup { 
    private AbstractButton hack; 

    public NoneSelectedButtonGroup() { 
     super(); 
     hack = new JButton(); 
     add(hack); 
    } 

    @Override 
    public void setSelected(ButtonModel model, boolean selected) { 
     super.setSelected(selected ? model : hack.getModel(), true); 
    } 
} 
0

he notado un comportamiento extraño cuando se hace button.setSelected(false) en un botón/casilla que no esté seleccionado. Se deseleccionó todo como si hubiera deseleccionado algo.

i fijo de esta manera:

public class NoneSelectedButtonGroup extends ButtonGroup { 

    @Override 
    public void setSelected(ButtonModel model, boolean selected) { 
    if (selected) { 
     super.setSelected(model, selected); 
    } else if (getSelection() != model) { 
     clearSelection(); 
    } 
    } 
} 
Cuestiones relacionadas