2016-09-24 51 views
1

我的应用程序显示容器的长列表,并且当用户编辑其中一个容器时,整个列表必须刷新,因为其他容器中的内容可能会更改(它们也可能会更改大小)。在不滚动列表的情况下重建容器列表

目前我只需通过getContentPane().removeAll()来完成此操作,然后重新计算所有容器,然后使用revalidate()来显示更新后的表单。但是,当我这样做时,列表将滚动回顶部。

我该如何在列表中保留相同的滚动位置,例如刚才编辑的容器的新实例与之前保持在屏幕上的相同位置?我知道scrollComponentToVisible(Component),但据我所见,它不允许我将容器放在屏幕上与刷新前完全相同的位置。

+0

请添加完整的代码示例 –

回答

0

由于您重建位置可能会改变,所以直接调用setScrollY()可能不会提供相同的位置我不认为这是可行的,因为您需要更接近scrollComponentToVisible的功能。

+0

我查看了'scrollComponentToVisible(Component c)'的代码,但由于复杂性和边缘案例的覆盖,对我来说不太明显。你不可能为它添加一个'y'参数,在滚动之后指出'c'的上边缘的特定所需y位置?然后,在周围的容器被更新时,对用户来说好像“c”保持固定在屏幕上。 – user1246562

+0

刚注意到另一个细节。它还需要避免'scrollComponentToVisible'所做的视觉滚动,即使'c'组件已经在'scrollComponentToVisible'通常放置的屏幕底部已经可见。 – user1246562

+0

只要你派生'Container',如果你想要一个特定的区域,你可以使用'setScrollY()'。您仍然可以调用'scrollComponentToVisible',因为如果组件完全可见,它将不会执行任何操作。要禁用动画,只需调用'setSmoothScrolling(false)',但不要忘记之后将其返回true。 –

相关问题