ButtonGroup предназначен для радио-кнопок и гарантирует, что выбран только один в группе, что мне нужно для флажков, чтобы убедиться, что выбран хотя бы один, возможно, несколько.
Как установить хотя бы один флажок в группе?
Ответы (1)
Мое решение состояло в том, чтобы использовать пользовательскую группу кнопок:
/**
* A ButtonGroup for check-boxes enforcing that at least one remains selected.
*
* When the group has exactly two buttons, deselecting the last selected one
* automatically selects the other.
*
* When the group has more buttons, deselection of the last selected one is denied.
*/
public class ButtonGroupAtLeastOne extends ButtonGroup {
private final Set<ButtonModel> selected = new HashSet<>();
@Override
public void setSelected(ButtonModel model, boolean b) {
if (b && !this.selected.contains(model) ) {
select(model, true);
} else if (!b && this.selected.contains(model)) {
if (this.buttons.size() == 2 && this.selected.size() == 1) {
select(model, false);
AbstractButton other = this.buttons.get(0).getModel() == model ?
this.buttons.get(1) : this.buttons.get(0);
select(other.getModel(), true);
} else if (this.selected.size() > 1) {
this.selected.remove(model);
model.setSelected(false);
}
}
}
private void select(ButtonModel model, boolean b) {
if (b) {
this.selected.add(model);
} else {
this.selected.remove(model);
}
model.setSelected(b);
}
@Override
public boolean isSelected(ButtonModel m) {
return this.selected.contains(m);
}
public void addAll(AbstractButton... buttons) {
for (AbstractButton button : buttons) {
add(button);
}
}
@Override
public void add(AbstractButton button) {
if (button.isSelected()) {
this.selected.add(button.getModel());
}
super.add(button);
}
}
И вот как это использовать:
new ButtonGroupAtLeastOne().addAll(checkBox1, checkBox2)
Все предложения приветствуются.
person
Tibi
schedule
15.02.2013
ну, для лучшей помощи, скорее опубликуйте SSCCE, короткий, исполняемый, компилируемый
- person mKorbel; 15.02.2013
ну, он короткий, он запускается, компилируется... и мне не нужна помощь
- person Tibi; 18.02.2013