首先描述问题: 在由于宽度或高度的变化而重新布局期间,Java的ScrollPaneLayout在设置其视口的边界之前请求其子节点的preferredSize。在Text-Components上调用getPreferredSpan可以更改布局,因为此getPreferredSpan在内部调用setSize。结果是,在这种情况下,没有视图(扩展javax.swing.text.View)可以确保检索它的父组件的实际大小。由于尚未设置视口的边界,因此getVisibleRect将在此位置失败。检查文本组件的有效性以阻止布局过程不是一个选项,因为在这种情况下它已经是有效的。
所以,问题是:是否有可能找出JComponent的边界是否是最新的?
答案 0 :(得分:1)
也许您可以将ScrollPanel子类化并在无效时将“com.mycompany.BoundsSet”之类的自定义属性设置为false,并在设置边界时将其设置为true。然后视图可以检查此属性,如果它是false,则重新验证ScrollPanel,并返回最后一个已知的首选大小。然后,希望ScrollPane继续并设置它的边界,然后revalidate事件将从管道下来,并且标志将被清除,允许您信任getBounds()。或类似的东西。
答案 1 :(得分:0)
您不能简单地使用Component#isValid方法。如果该方法返回true,则表示该组件的大小正确并且位于其父容器内,并且其所有子项也都有效。