我有一个包含 JPanel 的 JScrollPane。我用许多按钮填充这个 JPanel。
是否有可能获得当前显示的按钮?
我知道我可以通过访问 JPanel 的子级,jpanel.getComponents()
但这些都是此窗格中的组件;我只想要当前在屏幕上的那些。
我有一个包含 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
}
}
我假设这个容器已经在屏幕上可见,那么我建议
2)将ChangeListener 添加到JViewPort
3)每个可见JComponent(s)
返回矩形
4) 并且Rectangle#intersects返回Boolean
值是否JComponent(s)
可见JViewPort
询问组件是否可见如何:
for ( Component component : jpanel.getComponents() ) {
if ( component instanceof JButton && component.isShowing() ) {
// We've found a button that is showing...
}
}
scrollPane.getViewport().getView()
scrollPane.getViewport().getViewRect()