如何获取JFrame中的所有元素?

2022-09-02 05:18:58

我有这个代码来获取我需要的所有元素并进行一些处理。问题是我需要指定每个面板,我必须获取其中的元素。

for (Component c : panCrawling.getComponents()) {
    //processing
}
for (Component c : panFile.getComponents()) {
    //processing
}
for (Component c : panThread.getComponents()) {
    //processing
}
for (Component c : panLog.getComponents()) {
    //processing
}
//continue to all panels

我想做这样的事情,并获取所有元素,而无需指定所有面板名称。我是怎么做到的。下面的代码未获取所有元素。

for (Component c : this.getComponents()) {
    //processing
}

答案 1

您可以编写一个递归方法并在每个容器上递归:

此站点提供了一些示例代码:

public static List<Component> getAllComponents(final Container c) {
    Component[] comps = c.getComponents();
    List<Component> compList = new ArrayList<Component>();
    for (Component comp : comps) {
        compList.add(comp);
        if (comp instanceof Container)
            compList.addAll(getAllComponents((Container) comp));
    }
    return compList;
}

如果只需要直接子组件的组件,则可以将递归深度限制为 2。


答案 2

查看 JFrame 的文档。您放入的所有内容实际上都放在框架中包含的根窗格中。JFrame

for (Component c : this.getRootPane().getComponents())    

推荐