Java 在容器中获取所有swing组件

Java 在容器中获取所有swing组件,java,swing,awt,jcomponent,Java,Swing,Awt,Jcomponent,我认为我们可以使用jScrollPane.getComponents()来获取jScrollPane的awt组件。 我的问题是:有没有一种方法可以通过某种方式获得容器的swing组件?所有swing组件都扩展了JComponent Component[] comps = jScrollPane.getComponents(); ArrayList<JComponent> swingComps = new ArrayList<JComponent>(); for(Comp

我认为我们可以使用
jScrollPane.getComponents()
来获取jScrollPane的awt组件。
我的问题是:有没有一种方法可以通过某种方式获得容器的swing组件?

所有swing组件都扩展了JComponent

Component[] comps = jScrollPane.getComponents();
ArrayList<JComponent> swingComps = new ArrayList<JComponent>();

for(Component comp : comps) {
     if(comp instanceof JComponent) {
          swingComps.add((JComponent) comp);
     }
}
Component[]comps=jScrollPane.getComponents();
ArrayList swingComps=新的ArrayList();
用于(组件组件:组件){
if(JComponent的组件实例){
SwingComponent.add((JComponent)comp);
}
}

您可以调用
getComponents
,然后测试它是否是
JComponent
的实例。方法如下所示:

ArrayList jcomponents = new ArrayList();
for (Component c : container.getComponents())
{
      if (c instanceof JComponent)
      {
            jcomponents.add(c);
      }
 }

这与另一个答案基本相同,直到我发布我的答案后,我才看到另一个答案。Swing组件扩展了AWT组件。(因此
getComponents()
同时报告这两个组件)。通常,您最好保留对重要组件的引用,而不是通过嵌套容器递归,以便在大海捞针。请注意,到目前为止,给出的两个答案不使用递归,只能得到JScrollPane的JViewport。@气垫船(周一上午,挑剔时间:-)它的视口(可以有几个)和滚动条。不同意你的其他评论:如果你需要经常与某个特定组件交谈,通常是时候仔细重新考虑设计了