【问题标题】:Storing array of Components(panel.getComponents()) to Array List将组件数组(panel.getComponents())存储到数组列表
【发布时间】:2016-06-28 09:05:57
【问题描述】:

我有 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&lt;JComponents&gt; 不接受数组。我收到一条错误消息:不兼容的类型:Component[] 无法转换ArrayList&lt;JCheckBox&gt;

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

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

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

【问题讨论】:

    标签: java swing arraylist jcomponent


    【解决方案1】:

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

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

    【讨论】:

    • 首先检查c 是否属于JCheckBox 类型可能有意义,这取决于homePermssionsCheckBoxPanel 是否包含任何其他组件,例如按钮。
    • @Marv 确实,我会添加它。
    • @Yassin Hajaj 谢谢。这需要更少的代码。这就是我想做的。感谢您的帮助。
    • @YassinHajaj 顺便说一句,这适用于 Java 8,但是当我在 java 1.7 上尝试它时,它不起作用。它在 Stream.of(...) 上显示一个错误,看起来它无法识别它。你有什么建议让它在 Java 1.7 上运行吗?谢谢。
    • @YassinHajaj 这很有帮助。我的知识实际上仅限于 ArrayLists 和 Lists,当我看到您的语法时,我才开始研究 Collections 和 Sets。我很欣赏 Java 7 的建议,因为我们的团队正在使用 Java 7。谢谢。还有很多东西要学。
    猜你喜欢
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 2012-10-30
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多