你可以动态创建对JCheckBox对象的引用吗?

时间:2012-11-28 00:22:19

标签: java arrays swing jcheckbox

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

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”分配给String变量,然后添加isSelected。不幸的是我不断收到错误消息。

我是一名新手程序员,所以我不知道我想做什么或者叫什么。如果有可能解释如何被欣赏。

2 个答案:

答案 0 :(得分:2)

只需创建一个checkboxes列表并迭代它。

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

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

虽然可能有一个JCheckbox组可以做你想要的。

Looks like you can use ButtonGroup并获取要迭代的元素。

答案 1 :(得分: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);

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

如果您只想维护一个选中的复选框(即不允许选中多个复选框),那么您应该认真考虑使用JRadioButtonButtonGroup

否则你可以收集所有选中的复选框......

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