将组件数组(panel.getComponents())存储到Array List

时间:2016-03-13 09:37:48

标签: java swing arraylist jcomponent

我有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()方法,这样我就可以获得面板内的所有复选框。

也许喜欢,

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

而不是一个一个地添加它们,

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

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

你有什么建议吗?任何强制转换或转换的解决方法。我只是想缩短代码行。 :d

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

我很感激任何帮助。

1 个答案:

答案 0 :(得分:4)

创建自己的实用工具方法以获取组件。

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