Изменить размер клиента JScrollPane без прокрутки прокрутки.
-
19-09-2019 - |
Вопрос
У меня есть jscrollpane, который содержит прокручиваемый клиент, который динамически изменяет его размер при использовании приложения. Я хочу, чтобы jscrollpane знал об изменениях без перемещения просмотра при изменении размера клиента.
Чтобы прояснить, что я имею в виду: см. Пример Java Webstart Scrolldemo2 из статьи Как использовать панели свитков по солнцу При щелчке внизу окна кружок частично появляется за пределами окна, и Свитрольные полосы движутся. Анкет Это последнее поведение, которое я хочу избежать.
Я предполагаю, что это просто вопрос установления простого флага в одном из многих компонентов, которые участвуют в решении панели свитков, но я просто не могу найти, где он находится. Кто-нибудь знает?
Решение
Мне удалось решить эту проблему, переопределив стандартное поведение Viewport в моем JScrollpane. Это может быть решение, которое не подходит для всех, но в моем графическом интерфейсе это работает как очарование.
JScrollPane pane = new JScrollPane();
pane.setViewport(
new JViewport(){
/**
* An empty override implementation to prevent undesired scrolling on
* size changes of the client.
*/
@Override
public void scrollRectToVisible(Rectangle rect){}
});
Другие советы
Я бы попробовал что -то вроде:
Point p = scrollPane.getViewport().getViewportPosition();
revalidate();
scrollPane.getViewport().setViewportPosition(p);
Возможно, вам придется обернуть последнюю строку кода в SwingUtilities.invokelater.
Если это не работает, то, возможно, вы можете отключить/включить ViewPort до и после Revalidate ()?