所以当我打开我的文档时,我看到的是:
这是我文档第二页的第一部分和第一部分(其余部分为空)。除了绿色矩形中的内容(由盒子布局管理)外,它们是 100% 相等的。
在所有可见元素(洋红色的东西,第一个 JTextArea(比其他的大)与问题无关)之后,它们都添加了一个 Box.Filler,将所有内容推送到页面顶部。
因此,当我打开文档时,项目 38. 应该与所有其他项目一样高,但由于某种原因它不是。
我没有在 JScrollPane 和打开文档后立即包含两个页面的视口上调用重绘和验证。
此外,当我在文档中的任何位置添加或删除另一个元素时,数字 38 会出现并调整到适当的高度。我确实调用了 sam repaints 并验证何时发生这种情况,就像我在打开文档时所做的那样。
chageShape() 方法调用具有相同尺寸的填充物可以解决问题,但它似乎是一个肮脏的解决方案......
但它为什么不马上这样做呢?
编辑:经过更多测试,我发现填充物在这里一直是个坏孩子。但是我很难理解为什么第一页上的那个总是正确更新自己(即使页面上的元素更少),但是第二页上的那个拒绝,即使两个页面的编码方式没有区别(同一对象的两个实例),并且 repaint 和 validate 是从优于两者的容器调用的。