我有这个数组:
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的名称完全相同。
如何完成?谢谢!
答案 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:如果有人寻求更好的解决方案来帮助他人,它将保留更长的时间!