【问题标题】:How to check whether JComponent inside JScrollPane is visible to a user?如何检查 JScrollPane 中的 JComponent 是否对用户可见?
【发布时间】:2012-11-17 15:28:21
【问题描述】:

假设您有一个JScrollPane 和许多JLabels 或任何其他JComponents 添加到其中。

您将如何检查某个组件是否对用户可见/部分可见/不可见?(滚动)

我尝试过 Google,但找不到简单的解决方案。我是否缺少一些现有的方法,或者我们必须处理坐标和矩形比较?

UPD:以下不适用于我的情况。它似乎与 JLabel.setVisible(true/false) 有关,但不在 JScrollPane 中

JLabel.isVisible();

【问题讨论】:

    标签: java swing jscrollpane visibility jcomponent


    【解决方案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 的变量。
    猜你喜欢
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 2017-01-01
    相关资源
    最近更新 更多