如何在validateTree期间获得正确的可见矩形?

tig*_*ger 7 java layout swing scroll

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

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

Law*_*Dol 1

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