繁体   English   中英

JCheckBoxMenuItem仅选中一项

[英]JCheckBoxMenuItem only one selected

所以我想有一个JMenu Level,它带有三个JCheckBoxMenuItem,例如Easy,normal和expert。 当然,只能选中一个,如果选中一个,则不能取消选中(enabled(false)),因为它是唯一的一个。 我想当一个JCheck被选中时,所有其他都未被选中。

因此,这似乎很容易,但是我发现的唯一解决方案是在很多“如果”条件下执行此操作。

有没有办法用更好的算法做到这一点?

听起来您最好使用JRadioButton,因为复选框通常用于多选选项,而单选按钮通常用于多个选择。 可以使用ButtonGroup将JRadioButtons分组在一起,而ButtonGroup一次只能选择一个。

   public void stateChanged(ChangeEvent e) {

    if (e.getSource() == cb1 && cb1.isSelected()) {
        cb2.setSelected(false);
        cb3.setSelected(false);
    } else if (e.getSource() == cb2 && cb2.isSelected()) {
        cb3.setSelected(false);
        cb1.setSelected(false);
    } else if (e.getSource() == cb3 && cb3.isSelected()) {
        cb1.setSelected(false);
        cb2.setSelected(false);
    }
}

我只是将我所有的JCheckBoxMenuItems放在一个数组中,每次选择JCheckBoxMenuItem时都调用此方法

public void clearCheckBoxes(){
for (JCheckBoxMenuItem arrayCB1 : arrayCB) {
if (arrayCB1 != cb) {
arrayCB1.setSelected(false);
} else {
arrayCB1.setSelected(true);
}
        }
}

烦人的部分是必须手动将它们放入数组中,也许jMenu类具有返回完整数组的方法,但我没有打扰

        arrayCB[0]=bridgeCB;
        arrayCB[1]=swampCB;
        arrayCB[2]=flowerCB;
        arrayCB[3]=MountainCB;
        arrayCB[4]=Mountain2CB;
        arrayCB[5]=forestCB;
        arrayCB[6]=parisCB;
        arrayCB[7]=roadCB;
        arrayCB[8]=waveCB;
        arrayCB[9]=lakeCB;

以防万一,这就是创建数组的方式

JCheckBoxMenuItem [] arrayCB=new JCheckBoxMenuItem[10];

我不知道很多的if语句的方式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM