【问题标题】:How to create JCheckBox for elements of an ArrayList如何为 ArrayList 的元素创建 JCheckBox
【发布时间】:2015-02-09 11:20:55
【问题描述】:

我有一个由用户填写的数组。然后这个数组的每个元素都是一个 CheckBox。例如,如果数组有 6 个元素,则必须创建 6 个复选框。

这就是我尝试遍历数组并创建复选框的方式,但它只覆盖了一个复选框。

public static void main(String[] args) {    
    JFrame frame = new JFrame("Options");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    frame.setSize(300, 300);

    ArrayList<String> myArrayList = new ArrayList<String>();
    myArrayList.add("checkbox 1"); 
    myArrayList.add("checkbox 2");
    myArrayList.add("checkbox 3");
    myArrayList.add("checkbox 4");
    myArrayList.add("checkbox 5");

    for(String element : myArrayList){
        JCheckBox box  = new JCheckBox(element);
        frame.add(box);
    }

    frame.setVisible(true);
}

重要的是我以后可以访问每个复选框,因此我可以指定例如if checkbox2 is selected, do this

那么有没有办法根据 ArrayList 的大小动态地制作这些复选框?

【问题讨论】:

  • 创建另一个 ArrayList,并用它来存储对复选框的引用。

标签: java checkbox arraylist


【解决方案1】:

每次您向 JFrame 添加新内容时,它都会删除之前在其中的内容。

您需要创建一个 JPanel 或其他一些容器来保存 JCheckBox,然后将其放入 JFrame 中。

此外,您可以跟踪列表中的复选框。

例如:

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(BoxLayout.Y_AXIS, panel));
List<JCheckBox> checkboxes = new ArrayList<>();

for(String element : myArrayList) {
    JCheckBox box = new JCheckBox(element);
    checkboxes.add(box);
    panel.add(box);
}

frame.add(panel);

【讨论】:

  • 感谢您的解决方案。似乎工作。只有两件事。 List&lt;JCheckBox&gt; checkboxes = new ArrayList&lt;&gt;(); 行出现错误:type List does not take parameteres。您还可以举一个访问此复选框之一的示例吗?类似checkbox2.setEnabled(false);
  • @dan 你想导入“java.util.List”而不是“java.awt.List”;您可以使用 List 的 get 方法访问 List 中的元素。我建议你看看the Collections trail
【解决方案2】:

主要问题是,您将所有复选框添加到框架上的同一位置。

JFrame 默认使用BorderLayoutBorderLayout 允许在其五个可用插槽中的每一个中管理单个组件。基本上,BorderLayout 将忽略添加到任何插槽的最后一个组件以外的所有组件

请尝试将LayoutManager 更改为更有用的名称,例如FlowLayoutGridBagLayout,具体取决于您的需要

查看Laying Out Components Within a Container了解更多详情。

根据您的需要,我可能会使用JCheckBoxes 而不是String 甚至是Map 填充ArrayList,以便更轻松地将文本与@987654333 链接起来@

【讨论】:

    猜你喜欢
    • 2015-04-16
    • 2011-05-31
    • 1970-01-01
    • 2012-01-09
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多