Leo*_*eon 5 java swing jpanel scrollpane jscrollpane
我有一个包含JPanel的JScrollPane.我用许多按钮填充这个JPanel.
是否有可能获得当前显示的按钮?
我知道我可以访问JPanel的子节点,jpanel.getComponents()但这些都是此窗格中的组件; 我只想要当前在屏幕上的那些.
正如@ 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)
我假设这个容器已经在屏幕上可见,然后我建议
1)从JScrollPane中提取JViewPort,
2)addChangeListener到JViewPort
3)每个可见的JComponent(s)返回Rectangle
4)和Rectangle #crosss返回Boolean值,如果JComponent(s)可见或不可见JViewPort