【问题标题】:How to get a correct visible rect during a validateTree?如何在验证树期间获得正确的可见矩形?
【发布时间】:2009-08-18 09:19:09
【问题描述】:

首先描述问题: 在由于宽度或高度的变化而重新布局期间,Java 的 ScrollPaneLayout 在设置其视口的边界之前请求其子项的 preferredSize。在 Text-Components 上调用 getPreferredSpan 可以更改布局,因为此 getPreferredSpan 在内部调用 setSize。效果是,在这种情况下,没有任何视图(扩展 javax.swing.text.View)可以确定检索其父组件的实际大小。在这种情况下,getVisibleRect 将失败,因为尚未设置视口的边界。检查文本组件的有效性以阻止布局过程不是一种选择,因为它在这种情况下已经有效。

所以,问题是:是否有可能查明 JComponent 的边界是否是最新的?

【问题讨论】:

  • 对不起,我也不知道。添加了“swing”标签...
  • 这个问题很混乱。你能帮我们清理一下吗?
  • 我不会担心这个。需要从子组件获取父组件的大小是应用程序设计不正确的一个很好的指标。我的意思是——你真的需要解决这个问题吗?背景是什么?

标签: java swing layout scroll


【解决方案1】:

也许您可以继承 ScrollPanel 并在无效时将“com.mycompany.BoundsSet”之类的自定义属性设置为 false,并在设置边界时将其设置为 true。然后视图可以检查此属性,如果它为假,则重新验证 ScrollPanel,并返回最后知道的首选大小。希望然后,ScrollPane 将继续并设置它的边界,然后重新验证事件将通过管道传递,并且标志将被清除,从而允许您信任 getBounds()。或者类似的东西。

【讨论】:

    【解决方案2】:

    你不能简单地使用Component#isValid 方法。如果该方法返回 true,则意味着组件在其父容器中的大小和位置正确,并且它的所有子容器也是有效的。

    【讨论】:

      猜你喜欢
      • 2011-10-10
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      相关资源
      最近更新 更多