0

我不知道怎么问这个。我正在处理的程序已经完成,但它似乎有过多的代码。以下是部分代码:

chkDef1 = new JCheckBox

if (chkDef1.isSelected()) {
            actual = chkDef1.getText();
        } 
else if (chkDef2.isSelected()) {
            actual = chkDef2.getText();
        } 
else if (chkDef3.isSelected()) {
            actual = chkDef3.getText();
        } 
else {
            actual = chkDef4.getText();
        }

在其他区域,chkDef1 - 4 复选框存在大量重复代码。我想做的是在重复代码的区域使用循环,然后只使用 1 个赋值语句。

我试过: if(('chkDef' + counter).isSelected())

我还尝试将“'chkDef' + counter”分配给字符串变量,然后添加 isSelected。不幸的是,我不断收到错误消息。

我是一个新手程序员,所以我不知道我想做的事情是否可能或它叫什么。如果可能的话,将不胜感激。

4

2 回答 2

2

只需创建一个列表checkboxes并遍历它。

ArrayList<JCheckBox> checkboxes  = new ArrayList<JCheckBox>();
//Init your checkboxes array. 

for(JCheckbox chkbox :checkboxes)
{
  if(chkbox.isSelected())
   {
    actual = chkbox.getText() ; break;
  }
}

虽然,可能有一个 JCheckbox 组可以满足您的需求。

看起来您可以使用 ButtonGroup并让元素对其进行迭代。

于 2012-11-28T00:25:27.067 回答
2

您可以创建一个包含所有复选框的数组,然后遍历该数组...

JCheckBox[] boxes = new JCheckBox[] {chkDef1,chkDef2,chkDef3,chkDef4}
for (JCheckBox box : boxes) {
    if (box.isSelected()) {
        actual = box.getText();
        break; // We don't want to loop unnecessarily
    }
}

同样,您可以创建一个采用可变数量参数的简单方法...

public String getCheckedItem(JCheckBox... boxes) {
    String actual = null;
    for (JCheckBox box : boxes) {
        if (box.isSelected()) {
            actual = box.getText();
            break; // We don't want to loop unnecessarily
        }
    }
    return actual;
}

并称它为...

String actual = getCheckItem(chkDef1, chkDef2, chkDef3, chkDef4);

就个人而言,我会退回复选框,但这取决于你

如果您只对维护一个选中的复选框感兴趣(即不允许选中多个复选框),那么您应该认真考虑使用JRadioButtons andButtonGroup来代替。

否则,您可以收集所有选定的复选框...

public JCheckBox[] getCheckedItem(JCheckBox... boxes) {
    List<JCheckBox> selected = new ArrayList<JCheckBox>(boxes.length);
    for (JCheckBox box : boxes) {
        if (box.isSelected()) {
            selected.add(box);
        }
    }
    return selected.toArray(new JCheckBox[selected.size]);
}
于 2012-11-28T00:27:08.340 回答