如何使用getComponent()设置子组件的复选框setSelected()

时间:2016-03-23 14:11:45

标签: java swing list jcheckbox

我正在尝试将所有复选框的值设置为setSelected(false)。这些复选框来自具有其他子面板的不同子面板。 getComponents(panelName)仅获取其中包含的组件,但不包含子面板的每个子面板/子面板......等等。

enter image description here

在上文中,allPermissionsJPanel是父面板。 settingsButtonPanelcardContainerPanel作为第一级子面板,我希望每个JCheckBox都设置为false。

我该怎么做?我尝试使用getComponents(),但它没有返回子面板子面板中的所有复选框。

这是我的代码。

List<Component> allPermissionsCheckboxes =fm.getComponentsAsList(allPermissionsJPanel);


        for(Component c: allPermissionsCheckboxes){
            if(c instanceof JCheckBox){
                ((JCheckBox) c).setSelected(false);
            }
        }

我尝试检查与getComponents()相关的其他方法,但我没有找到遍历子面板子面板的方法,因此我可以检查它是instanceof还是JCheckBox。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您希望将此实现为递归方法,该方法遍历组件层次结构,查找复选框并执行setSelected(false)

该方法可能如下所示:

public void deselectAllCheckBoxes(Component panel) {
    List<Component> allComponents = fm.getComponentsAsList(panel);

    for (Component c : allComponents) { // Loop through all the components in this panel
        if (c instanceof JCheckBox) { // if a component is a check box, uncheck it.
            ((JCheckBox) c).setSelected(false);
        } else if (c instanceof JPanel) { // if a component is a panel, call this method
            deselectAllCheckBoxes(c);     // recursively.
    }
}

然后您只需拨打deselectAllCheckBoxes(allPermissionsPanel);

即可