在JScrollPane中获取显示的组件

Leo*_*eon 5 java swing jpanel scrollpane jscrollpane

我有一个包含JPanel的JScrollPane.我用许多按钮填充这个JPanel.

是否有可能获得当前显示的按钮?

我知道我可以访问JPanel的子节点,jpanel.getComponents()但这些都是此窗格中的组件; 我只想要当前在屏幕上的那些.

kle*_*tra 8

正如@ mKorbel的回答已经评论过:

  • 你需要孩子的界限是正确的
  • 你需要将这些界限与"某事"相交是正确的
  • 这是错误的,你需要的含视(也不滚动窗格)

JComponents有一个API来获取它们当前可见的部分,而与它们当前显示的位置无关,因此"某些东西"是JComponent的visibleRect:

Rectangle visibleRect = myPanel.getVisibleRect();
for (Component child : myPanel.getComponents()) {
   Rectangle childBounds = child.getBounds();
   if (childBounds.intersects(visibleRect)) {
       // do stuff
   }
}
Run Code Online (Sandbox Code Playgroud)


mKo*_*bel 7

我假设这个容器已经在屏幕上可见,然后我建议

1)从JScrollPane中提取JViewPort,

2)addChangeListenerJViewPort

3)每个可见的JComponent(s)返回Rectangle

4)和Rectangle #crosss返回Boolean值,如果JComponent(s)可见或不可见JViewPort