我有一个JScrollPane
其视口是JPanel
. 该面板采用 a 布局,BoxLayout
并且在用户交互时,组件的水平宽度可以改变。当有足够的组件需要滚动条时,更改组件的水平大小然后调用revalidate()
子JPanel
类(视口视图)将始终导致滚动窗格重置为 (0,0)。
我想保留当前视图,所以我设置了一个组件侦听器并将componentMoved()
值存储在getLocation()
(这都在 JPanel 子类或视口视图中)。调用后立即调用revalidate()
存储setLocation()
的位置(在事件调度线程上)。但是,这会导致视图位置设置为 (0,0) 的跳跃,然后立即跳转到存储的位置。有没有办法阻止JScrollPane
回到(0,0)?有没有更好的方法来告诉它它的视口视图的大小已经改变?
我试图(0,0)
通过子类化JScrollBar
和覆盖setValue()
并放置一个断点来弄清楚它的来源,但它没有被击中(但是当我移动滚轮时)所以我假设它是在内部设置的。有谁知道可能会发生什么?