Come creare ButtonGroup di JToggleButton che consente di deselezionare l'opzione attuale?
-
29-10-2019 - |
Domanda
Questo è tutto.Devo creare un ButtonGroup che consenta di selezionare un'opzione o, se l'utente fa clic sull'opzione selezionata, deselezionare l'elemento (non verrà selezionato nulla) e, ovviamente, catturare l'evento per fare qualcosa.
Soluzione
Nel caso in cui il collegamento di Jeff venga interrotto in futuro, ecco cosa viene descritto: è necessario creare una sottoclasse ButtonGroup per consentire una non selezione e aggiungere i pulsanti a questo buttongroup.
public class NoneSelectedButtonGroup extends ButtonGroup {
@Override
public void setSelected(ButtonModel model, boolean selected) {
if (selected) {
super.setSelected(model, selected);
} else {
clearSelection();
}
}
}
Altri suggerimenti
Questo mostra esattamente come farlo http://java.dzone.com/ articoli / unselect-all-toggle-buttons
Ho notato un comportamento strano durante l'esecuzione di button.setSelected(false)
su un pulsante / casella di controllo che non è selezionato.Ha deselezionato tutto come se avessi deselezionato qualcosa.
L'ho risolto in questo modo:
public class NoneSelectedButtonGroup extends ButtonGroup {
@Override
public void setSelected(ButtonModel model, boolean selected) {
if (selected) {
super.setSelected(model, selected);
} else if (getSelection() != model) {
clearSelection();
}
}
}
Cattura l'evento per fare qualcosa.Esegui anche le seguenti operazioni.
@Override
public void actionPerformed(ActionEvent e) {
((JToggleButton)e.getSource()).setSelected(false);
}
MODIFICA: Ma non è coinvolto alcun ButtonGroup.
Soluzione per 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);
}
}