我有一个包含JPanel的JScrollPane。我用这个按钮填充了这个JPanel。
是否有可能获得当前显示的按钮?
我知道我可以通过jpanel.getComponents()
访问JPanel的子级,但这些都是此窗格中的组件;我只想要屏幕上的那些。
答案 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)addChangeListener到JViewPort
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()