将组件数组(panel.getComponents())存储到数组列表

Storing array of Components(panel.getComponents()) to Array List

我有 3 个复选框并计划添加更多,我需要确定它是否被选中。所以我所做的就是将它们放在 JCheckBox 的 ArrayList 中。顺便说一下,我使用的是 SMALLINT apache derby 数据类型,我会在其上使用 preparedStatement.getBoolean();

ArrayList<JCheckBox> homeCbxs = new ArrayList<>();
homeCbxs.add(updateUserNameCheckBox); // 0
homeCbxs.add(updatePasswordCheckBox); // 1
homeCbxs.add(updatePhotoCheckBox); // 2

int x = 0; 
for(JCheckBox cb : homeCbxs){
    Boolean bool;
    bool = cb.isSelected();
    //preparedStatement here, ps.setInt(x,bool)
    x++;
}

我想也许我可以使用 getComponents() 方法,其中 returns 一个组件数组,这样我就可以获得面板中的所有复选框。

可能喜欢,

ArrayList<JCheckBox> homeCbxs = homePermssionsCheckBoxPanel.getComponents();

与其一一相加,

homeCbxs.add(updateUserNameCheckBox); // 0
homeCbxs.add(updatePasswordCheckBox); // 1
homeCbxs.add(updatePhotoCheckBox); // 2

但是,问题是 ArrayList<JComponents> 不接受数组。我收到一条错误消息,指出 类型不兼容:组件 [] 无法转换 ArrayList<JCheckBox>

你有什么建议吗?投射或进行某些转换的任何解决方法。我只是想缩短代码行。 :D

此外,我想问一下 getComponents() 是否将 0 分配为它的数组的第一个索引。

如有任何帮助,我将不胜感激。

创建您自己的实用程序方法来获取组件。

public List<Component> getComponentsAsList (Container cont){
    return Stream.of(cont.getComponents())
                 .collect(Collectors.toList());
}

然后,您只需不要忘记将它们转换为 JCheckBox 以检查它们是否被选中。

List<Component> list = getComponentsAsList(homePermssionsCheckBoxPanel);

for(Component c : list){
    if (!(c instanceof JCheckBox)) continue;
    if (((JCheckBox)c).isSelected()){
        // doStuff
    }
}

public List<Component> getComponentsAsList (Container cont){
    List<Component> tmp = new ArrayList<>();
    for (Component c : cont.getComponents()) {
        tmp.add(c);
    }
    return tmp;
}