我正在使用JViewport的子类调试自定义滚动视图的问题。我在自定义LayoutManager中的layoutContainer()方法中打印了一些信息,并看到它是连续调用的,没有任何调整大小来触发它。我查看了源代码,看起来好像JViewport.setViewPosition()在每次调用时重新生效。我认为那不可能。所以我使用标准的JScrollPane回到了另一个项目,并添加了这段代码:
myScrollPane.setLayout(new ScrollPaneLayout() {
@Override
public void layoutContainer(Container parent) {
System.out.println("Layout ScrollPane");
super.layoutContainer(parent);
}
});
证明了标准版本存在同样的问题。有一个强大的,可接受的方式吗?我使用JViewport子类的几个实例来显示波形,并使用JViewport.setViewPosition()实时滚动其他内容,并且每10毫秒布置容器(每次完全相同)是一个很大的低效率。我可以继承JViewport并覆盖它,但理解为什么认为有必要仅仅为了改变视图位置而重新验证将有助于我避免产生新问题。目前,我很困惑为什么这是必要的。
所以推论问题是"为什么JViewport.setViewPosition()"导致重新验证?"。