У меня есть JScrollPane
, окно просмотра которого является подклассом JPanel
. Эта панель выложена с помощью BoxLayout
, и при взаимодействии с пользователем горизонтальная ширина компонентов может измениться. При наличии достаточного количества компонентов, таких как полосы прокрутки, изменение горизонтального размера компонента и последующий вызов revalidate()
в подклассе JPanel
(вид области просмотра) всегда приводит к сбросу панели прокрутки на (0,0).
Я хотел бы сохранить текущее представление, поэтому я настроил прослушиватель компонентов и на componentMoved()
я сохраняю значение в getLocation()
(все это находится в подклассе JPanel или в окне просмотра). Сразу после вызова revalidate()
я вызываю setLocation()
с сохраненным местоположением (в потоке отправки событий). Однако это вызывает дрожание, когда позиция просмотра установлена на (0,0), а затем немедленно переходит к сохраненному местоположению. Есть ли способ остановить возвращение JScrollPane
к (0,0)? Есть ли лучший способ сказать, что размер окна просмотра изменился?
Я попытался выяснить, откуда берется (0,0)
, создав подкласс JScrollBar
и переопределив setValue()
и поставив точку останова, но он не попадает туда (но происходит, когда я перемещаю колесо прокрутки), поэтому я предполагаю, что он устанавливается внутри. Кто-нибудь знает, что может происходить?