JCheckBoxMenuItem只选了一个

时间:2013-12-21 15:15:12

标签: java swing optimization jcheckbox jmenu

所以我希望JMenu等级有三个JCheckBoxMenuItem,比如Easy,normal和expert。 当然,只能检查一个,如果选中一个,则无法取消选中(启用(false)),因为它是唯一的一个。 我希望在检查一个JCheck时,所有其他都未选中。

所以看起来很容易,但我找到的唯一解决办法就是在很多“if”条件下做到这一点。

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

3 个答案:

答案 0 :(得分:4)

听起来你最好使用JRadioButton,因为复选框通常用于多选项和单选按钮中的复选框。 JRadioButtons可以使用ButtonGroup组合在一起,ButtonGroup一次只能选择一个。

答案 1 :(得分:1)

   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);
    }
}

答案 2 :(得分:0)

我只是将所有JCheckBoxMenuItem放入一个数组中 每次我选择一个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语句的做法