在JScrollPane中获取显示的组件

时间:2011-12-13 07:54:26

标签: java swing jpanel jscrollpane scrollpane

我有一个包含JPanel的JScrollPane。我用这个按钮填充了这个JPanel。

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

我知道我可以通过jpanel.getComponents()访问JPanel的子级,但这些都是此窗格中的组件;我只想要屏幕上的那些。

4 个答案:

答案 0 :(得分: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
   }
}

答案 1 :(得分:7)

我认为这个容器已在屏幕上显示,然后我建议

1)从JViewPort中提取JScrollPane

2)addChangeListenerJViewPort

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

4)如果Boolean

JComponent(s)可见JViewPort,则Rectangle#intersects会返回{{1}}值

答案 2 :(得分:1)

询问组件是否可见时如何:

for ( Component component : jpanel.getComponents() ) {
    if ( component instanceof JButton && component.isShowing() ) {
        // We've found a button that is showing...
    }
}

答案 3 :(得分:0)

scrollPane.getViewport().getView()
scrollPane.getViewport().getViewRect()