【发布时间】:2011-02-04 23:56:50
【问题描述】:
就是这样。我需要创建一个 ButtonGroup 以允许选择一个选项,或者,如果用户单击所选选项,则取消选择该项目(不会选择任何内容),当然,捕获事件以执行某些操作。
【问题讨论】:
-
这对用户来说可能不直观。您是否考虑过使用一个选项来表示与取消选择相对应的状态/选择?
标签: java swing buttongroup
就是这样。我需要创建一个 ButtonGroup 以允许选择一个选项,或者,如果用户单击所选选项,则取消选择该项目(不会选择任何内容),当然,捕获事件以执行某些操作。
【问题讨论】:
标签: java swing buttongroup
以防万一 Jeff 的链接在未来被破坏,这里是描述的: 您需要继承 ButtonGroup 以允许无选择,并将您的按钮添加到此按钮组。
public class NoneSelectedButtonGroup extends ButtonGroup {
@Override
public void setSelected(ButtonModel model, boolean selected) {
if (selected) {
super.setSelected(model, selected);
} else {
clearSelection();
}
}
}
【讨论】:
ButtonGroup myGroup = new ButtonGroup(){ /*code from above*/ };
button.setSelected(false)。
【讨论】:
在未选中的按钮/复选框上执行button.setSelected(false) 时,我注意到奇怪的行为。它取消了所有的选择,就好像我取消了某些东西一样。
我是这样解决的:
public class NoneSelectedButtonGroup extends ButtonGroup {
@Override
public void setSelected(ButtonModel model, boolean selected) {
if (selected) {
super.setSelected(model, selected);
} else if (getSelection() != model) {
clearSelection();
}
}
}
【讨论】:
捕获事件以做某事。还请执行以下操作。
@Override
public void actionPerformed(ActionEvent e) {
((JToggleButton)e.getSource()).setSelected(false);
}
编辑: 但是没有涉及到 ButtonGroup。
【讨论】:
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);
}
}
【讨论】: