【问题标题】:Getting lots of marked JCheckBoxes on a new JPanel?在新的 JPanel 上获得大量标记的 JCheckBox?
【发布时间】:2017-01-20 20:48:28
【问题描述】:

我在滚动窗格上的 JPanel 上有很长的复选框列表(大约 150 个),用户可以根据需要进行检查。在这个过程的最后有一个 JButton,它应该接受所有标记的复选框并将它们的描述放在不同的 JPanel 上。我对 Java 很陌生,不知道如何在不为每个 Checkbox 创建 itemListener 的情况下做到这一点,这似乎非常不切实际。我已经阅读了很多关于将复选框放入 ArrayList 并检查元素的线程,但我仍然不明白如何做到这一点。我当前的代码如下所示:

JCheckBox checkbx511 = new JCheckBox("This is the text I need");
chckbx511.setToolTipText("<html>This would be a nice bonus</html>");

有人知道一种将所有选定元素放在新列表中的简单方法吗?

【问题讨论】:

  • 迭代列表并在每个列表上调用isSelected()
  • 注意:很多类似的代码 -> 应该迭代一个集合。在这里,您应该将这些复选框存储到列表中(使用循环生成这些复选框)。以及使用Kayaman的想法

标签: java checkbox


【解决方案1】:

您应该将复选框的描述放在一个数组中,然后创建一个复选框列表,如下所示:

// Creating checkboxes
String[] descriptions = { "Description 1", "Description 2", "Description 3"};
List<JCheckBox> checkBoxes = new ArrayList<JCheckBox>();
for (String description : descriptions) {
    JCheckBox checkBox = new JCheckBox(description);
    checkBoxes.add(checkBox);
    jPanel.add(checkBox);
}

然后,当您按下按钮时,您只需遍历复选框列表即可找出选中了哪些框并将它们添加到新面板中。

// On button press
for (JCheckBox checkBox : checkBoxes) {
    if (checkBox.isSelected()) {
        otherJPanel.add(new JLabel(checkBox.getText()));
    }
}

【讨论】:

    【解决方案2】:

    你应该先创建一个List

    List<JCheckBox> list = new ArrayList<>();
    

    然后,您需要将这些复选框存储到此列表中。您可以通过和添加每一个

    list.add(checkbx511);
    

    或更改构建方式以使用循环(文本可以在 String[] 中进行迭代)

    然后,要获得选中的复选框,您只需要迭代您的新列表并检查它是否被CheckBox.isSelected() 选中。您将这些实例存储到另一个列表中,然后您就有了结果。

    List<JCheckBox> resultList = new ArrayList<>();
    for(JCheckBox cb : list){
        if(cb.isSelected()){
            resultList.add(cb);
        }
    }
    

    注意:在 Stream API 中有一种方法可以做到这一点,但我会让其他人编写它,因为我不太了解它。

    注意 2:有一种不使用 List 的复杂方法,即在每个 JCheckBox 实例中搜索 JPanel 组件。但这需要编写一个已知的结构

    【讨论】:

    • 感谢您的全面回答!我应该能够实现这一点。
    • @Lotec,如果您对此解决方案有任何疑问,请随时提问。请参阅有关我在循环中创建复选框的解决方案的 Sore Throad 答案,我没有添加它,因为这并不是真正需要的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 2020-03-11
    相关资源
    最近更新 更多