如何检查 JScrollPane 中的 JComponent 是不是对用户可见?
Posted
技术标签:
【中文标题】如何检查 JScrollPane 中的 JComponent 是不是对用户可见?【英文标题】:How to check whether JComponent inside JScrollPane is visible to a user?如何检查 JScrollPane 中的 JComponent 是否对用户可见? 【发布时间】:2012-11-17 15:28:21 【问题描述】:假设您有一个JScrollPane
和许多JLabel
s 或任何其他JComponent
s 添加到其中。
您将如何检查某个组件是否对用户可见/部分可见/不可见?(滚动)
我尝试过 Google,但找不到简单的解决方案。我是否缺少一些现有的方法,或者我们必须处理坐标和矩形比较?
UPD:以下不适用于我的情况。它似乎与 JLabel.setVisible(true/false) 有关,但不在 JScrollPane 中
JLabel.isVisible();
【问题讨论】:
【参考方案1】:查看 JComponent java 文档:
Rectangle r = child.getVisibleRect();
if (r.getSize().equals(child.getSize()))
// fully visible
else if (r.isEmpty())
// not visible
else
// partly visible
编辑
将不可见的条件更改为使用 Rectangle api - 感谢 @mKorbel 提醒我 :-)
【讨论】:
@kleopatra 为什么不使用 if (r.intersects(child)) @mKorbel 如果您只对孩子的任何部分是否可见或什么都不可见感兴趣,这是一个选项。并且需要第二个矩形。还是我误解了你的建议? 我已经这样做了,但是如果您移动滚动条并且出现一些新按钮,它们仍然会打印出它们不可见。 r 矩形相对于滚动条和组件滚动条永远不会改变。有什么解决办法吗?还是我做错了什么? 我找到了解决方案。我用这个替换了你的第一行代码:Rectangle r = scrollPane.getViewport().getViewRect()。其中 scrollPane 显然是指向 Scroll Pane 的变量。以上是关于如何检查 JScrollPane 中的 JComponent 是不是对用户可见?的主要内容,如果未能解决你的问题,请参考以下文章
使用鼠标滚轮时如何加快 JScrollPane 中的滚动速度?