繁体   English   中英

将组件数组(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()方法返回一个组件数组,以便可以将面板中的所有复选框都获取到。

也许像

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分配为其数组的第一个索引。

我将不胜感激。

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

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

然后,您不必忘记将它们JCheckBox转换为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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM