可变内容(字符串)以访问JCheckBox的方法

时间:2018-10-01 16:33:57

标签: java arrays swing jcheckbox

我有这个数组:

android:focusableInTouchMode="true"
android:descendantFocusability="beforeDescendants" 

和此arrayList:

String extras[] = new String[6];

extras[0] = "bacon";
extras[1] = "potato";
extras[2] = "chicken";
extras[3] = "cheese";
extras[4] = "olive";
extras[5] = "tomato";

我试图只获取选定的itens,所以我有这个for循环:

ArrayList selectedExtra = new ArrayList();

我正在尝试为每个String赋予属性,比如说“ Bacon”,并使用它来检查是否选择了具有该名称的JCheckBox,如果是,则将该属性赋予我的arrayList。

是的,数组项的名称与JCheckBox的名称完全相同。

如何完成?谢谢!

3 个答案:

答案 0 :(得分:3)

您可能有一个HashMap,它可以将Strings(附加对象的名称)映射到JCheckBox实例。然后,您可以使用String在该哈希图中进行查找,以获取适当的复选框,以检查是否已选中它。

类似这样的东西:(当然,这大大简化了)

private final Map<String, JCheckBox> boxes = new HashMap<>();

{
    String[] extras = {"Bacon"};

    boxes.put("bacon", new JCheckBox("Bacon"));

    for (String extra : extras) {
        if (boxes.get(extra).isSelected()) {
            // do stuff
        }
    }
}

当然,更干净的选择是使用Enum作为附加项。然后,您可以将EnumMap用于JCheckBox实例。

答案 1 :(得分:3)

String表示形式放入Array并尝试获取Object似乎过于复杂。为什么不将实际的JCheckBox存储在数组中?

JCheckBox[] extras = new JCheckBox[6];
//add items

//Don't use raw types! 
ArrayList<JCheckBox> selectedExtra = new ArrayList<>();

for (int i=0; i<extras.length ; i++){
    if(extras[i].isSelected()){  
       selectedExtra.add(extras[i]); // add the selected extras 
    }
 }

答案 2 :(得分:0)

我用一个更脏的解决方案解决了它。我测试是否选择了每个selectedExtra,如果是,则检查数组是否已经包含我要查找的单词;如果没有,我会在上面加上这个词。

 if (!selectedExtra.contains("Bacon") && bacon.isSelected()) {
            selectedExtra.add("Bacon");
    }   

对每个项目执行该操作。

ps:如果有人寻求更好的解决方案来帮助他人,它将保留更长的时间!