¿Cómo crear ButtonGroup de JToggleButton's que permite deseleccionar la opción actual?
-
29-10-2019 - |
Pregunta
Eso es todo.Necesito crear un ButtonGroup que permita seleccionar una opción o, si el usuario hace clic en la opción seleccionada, deseleccionar el elemento (no se seleccionará nada) y, por supuesto, capturar el evento para hacer algo.
Solución
En caso de que el enlace de Jeff se rompa en el futuro, esto es lo que se describe: debe crear una subclase de ButtonGroup para permitir una no selección y agregar sus botones a este buttongroup.
public class NoneSelectedButtonGroup extends ButtonGroup {
@Override
public void setSelected(ButtonModel model, boolean selected) {
if (selected) {
super.setSelected(model, selected);
} else {
clearSelection();
}
}
}
Otros consejos
Esto muestra exactamente cómo hacerlo http://java.dzone.com/ artículos / deseleccionar-todos-los-botones-de-alternancia
Noté un comportamiento extraño al hacer button.setSelected(false)
en un botón / casilla de verificación que no está seleccionado.Deseleccionó todo como si yo deseleccionara algo.
Lo arreglé 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();
}
}
}
Capture el evento para hacer algo.También haga lo siguiente.
@Override
public void actionPerformed(ActionEvent e) {
((JToggleButton)e.getSource()).setSelected(false);
}
EDITAR: Pero no hay ButtonGroup involucrado.
Solución para pre java 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);
}
}