【问题标题】:Variable content (String) to access JCheckBox's methods访问 JCheckBox 方法的变量内容(字符串)
【发布时间】:2018-10-01 16:33:56
【问题描述】:

我有这个数组:

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 的名称完全相同。

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

【问题讨论】:

  • 不是答案,但您应该避免使用原始类型。试试ArrayList&lt;String&gt; selectedExtra = new ArrayList&lt;&gt;();

标签: java arrays swing jcheckbox


【解决方案1】:

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

【讨论】:

  • 它也没有工作,因为 extras[i] 仍然不被认为是 JCheckBox,因此我不能调用 'isSelected' 方法。我用一个更脏的解决方案解决了这个问题。我测试是否选择了每个 selectedExtra,如果是,我检查数组是否已经包含我要在其中查找的单词;如果没有,我会添加这个词。
  • @JhonatanCruz 这段代码在我运行时运行良好。
  • 奇怪,我一定是做错了什么,我去看看!
【解决方案2】:

您可以有一个 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。

【讨论】:

    【解决方案3】:

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

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

    对每个项目都这样做。

    ps:如果有人提出更好的解决方案来帮助他人,我会让它打开一段时间!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 2012-02-05
      • 1970-01-01
      相关资源
      最近更新 更多