2016-09-24 75 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。 –

相關問題