在一个容器中获取所有的Swing组件

3

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


4
Swing组件扩展了AWT组件。(因此getComponents()会同时报告两者)。 - Andrew Thompson
通常情况下,保留对重要组件的引用比不得不递归遍历嵌套容器以在堆栈中查找所需内容更好。 - Hovercraft Full Of Eels
2
请注意,到目前为止给出的两个答案都没有使用递归,并且只会获取JScrollPane的JViewport。 - Hovercraft Full Of Eels
1
@Hovercraft(周一早上,吹毛求疵的时间到了 :-) 它是viewport_s_(可能有多个)和它的滚动条。不同意你的其他评论:如果你需要经常与特定组件交流,通常是重新仔细思考设计的时候了。 - kleopatra
2个回答

2
所有Swing组件都扩展自JComponent。
Component[] comps = jScrollPane.getComponents();
ArrayList<JComponent> swingComps = new ArrayList<JComponent>();

for(Component comp : comps) {
     if(comp instanceof JComponent) {
          swingComps.add((JComponent) comp);
     }
}

1
你可以调用getComponents,然后测试它是否是JComponent的实例。一个方法可能是这样的:
ArrayList jcomponents = new ArrayList();
for (Component c : container.getComponents())
{
      if (c instanceof JComponent)
      {
            jcomponents.add(c);
      }
 }

1
这与另一个答案基本相同,我在发表我的回答之后才看到了另一个答案。 - Nathan Moos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接