变量内容(String)访问JCheckBox的方法

Variable content (String) to access JCheckBox's methods

我有这个数组:

String extras[] = new String[6];

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

和这个数组列表:

ArrayList selectedExtra = new ArrayList();

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

for (int i=0; i<extras.length ; i++){

       String aditional = extras[i]; //get each extra name

       if(aditional.isSelected()){  // thats my problem
       selectedExtra.add(adicional); // add the selected extras 

        }
     }

我正在尝试为每个字符串添加属性,比方说 "Bacon",并使用它来检查是否选择了具有该名称的 JCheckBox,如果是,则将其添加到我的 arrayList。

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

我怎样才能完成??谢谢!

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

像这样:(当然这已经大大简化了)

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 作为附加功能。然后您可以为 JCheckBox 实例使用 EnumMap。

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

我用更脏的解决方案解决了这个问题。我测试是否每个 selectedExtra 都被选中,如果是,我检查数组是否已经包含我在其中查找的单词;如果没有,我给它加上这个词。

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

对每个项目都这样做。

ps:将它打开的时间更长一些,以防有人提出更好的解决方案来帮助他人!