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

How to set the checkbox setSelected() of child components using getComponent()

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

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

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

这是我的代码。

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


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

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

您需要将其实现为递归方法,该方法遍历组件层次结构以查找复选框并执行 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);