Code
class GroupCheckBox extends JCheckBox {
protected GroupCheckBox(String title) {
super(title);
}
@Override public void updateUI() {
super.updateUI();
setModel(new ToggleButtonModel() {
private static final int GROUP_SIZE = 3;
@Override public void setSelected(boolean selected) {
if (selected) {
if (getSelectedObjects().length == GROUP_SIZE) {
UIManager.getLookAndFeel()
.provideErrorFeedback(GroupCheckBox.this);
} else {
super.setSelected(true);
}
} else {
super.setSelected(false);
}
}
@Override public Object[] getSelectedObjects() {
Container parent = getParent();
return Arrays.stream(parent.getComponents())
.filter(AbstractButton.class::isInstance)
.map(AbstractButton.class::cast)
.filter(AbstractButton::isSelected)
.toArray();
}
});
}
}
References