我正在尝试将所有复选框的值设置为setSelected(false)
。这些复选框来自具有其他子面板的不同子面板。 getComponents(panelName)
仅获取其中包含的组件,但不包含子面板的每个子面板/子面板......等等。
在上文中,allPermissionsJPanel
是父面板。 settingsButtonPanel
和cardContainerPanel
作为第一级子面板,我希望每个JCheckBox
都设置为false。
我该怎么做?我尝试使用getComponents()
,但它没有返回子面板子面板中的所有复选框。
这是我的代码。
List<Component> allPermissionsCheckboxes =fm.getComponentsAsList(allPermissionsJPanel);
for(Component c: allPermissionsCheckboxes){
if(c instanceof JCheckBox){
((JCheckBox) c).setSelected(false);
}
}
我尝试检查与getComponents()
相关的其他方法,但我没有找到遍历子面板子面板的方法,因此我可以检查它是instanceof
还是JCheckBox
。有什么建议吗?
答案 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);