在JScrollPane中获取显示的组件
我有一个包含JPanel的JScrollPane。 我用许多按钮填充这个JPanel。
是否有可能获得当前显示的按钮?
我知道我可以通过jpanel.getComponents()
访问JPanel的jpanel.getComponents()
但这些都是此窗格中的组件; 我只想要当前在屏幕上的那些。
我假设这个容器已经在屏幕上可见,然后我建议
1)从JScrollPane中提取JViewPort ,
2) addChangeListener到JViewPort
3)每个可见的JComponent(s)
返回Rectangle
4)和Rectangle JViewPort
返回Boolean
值,如果JComponent(s)
在JViewPort
可见或不可见
正如@ mKorbel的回答已经评论过:
- 你需要孩子的界限是正确的
- 你需要将这些界限与“某事”相交是正确的
- 你需要包含视口(也不是滚动窗格)是错误的
JComponents有一个API来获取它们当前可见的部分,而与它们当前显示的确切位置无关,因此“某些东西”是JComponent的visibleRect:
Rectangle visibleRect = myPanel.getVisibleRect(); for (Component child : myPanel.getComponents()) { Rectangle childBounds = child.getBounds(); if (childBounds.intersects(visibleRect)) { // do stuff } }
如果组件可见,请问组件如何:
for ( Component component : jpanel.getComponents() ) { if ( component instanceof JButton && component.isShowing() ) { // We've found a button that is showing... } }
-
Component#isShowing()
scrollPane.getViewport().getView() scrollPane.getViewport().getViewRect()