Wie erstelle ich eine ButtonGroup von JToggleButton's, mit der die Auswahl der tatsächlichen Option aufgehoben werden kann?
-
29-10-2019 - |
Frage
Das war's.Ich muss eine ButtonGroup erstellen, mit der Sie eine Option auswählen können. Wenn der Benutzer auf die ausgewählte Option klickt, deaktivieren Sie das Element (es wird nichts ausgewählt) und erfassen Sie das Ereignis, um etwas zu tun.
Lösung
Für den Fall, dass Jeffs Link in Zukunft unterbrochen wird, wird Folgendes beschrieben: Sie müssen ButtonGroup in eine Unterklasse unterteilen, um eine Nichtauswahl zuzulassen, und Ihre Schaltflächen zu dieser Buttongroup hinzufügen.
public class NoneSelectedButtonGroup extends ButtonGroup {
@Override
public void setSelected(ButtonModel model, boolean selected) {
if (selected) {
super.setSelected(model, selected);
} else {
clearSelection();
}
}
}
Andere Tipps
Dies zeigt genau, wie das geht http://java.dzone.com/ articles / Alle Auswahlschaltflächen deaktivieren
Ich habe ein seltsames Verhalten festgestellt, als ich button.setSelected(false)
für eine Schaltfläche / ein Kontrollkästchen ausgeführt habe, das nicht ausgewählt ist.Es hat alles abgewählt, als hätte ich etwas abgewählt.
Ich habe es folgendermaßen behoben:
public class NoneSelectedButtonGroup extends ButtonGroup {
@Override
public void setSelected(ButtonModel model, boolean selected) {
if (selected) {
super.setSelected(model, selected);
} else if (getSelection() != model) {
clearSelection();
}
}
}
Erfassen Sie das Ereignis, um etwas zu tun.Führen Sie auch die folgenden Schritte aus.
@Override
public void actionPerformed(ActionEvent e) {
((JToggleButton)e.getSource()).setSelected(false);
}
BEARBEITEN: Es ist jedoch keine ButtonGroup beteiligt.
Lösung für 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);
}
}