Изменить размер клиента JScrollPane без прокрутки прокрутки.

StackOverflow https://stackoverflow.com/questions/1901459

Вопрос

У меня есть 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 ()?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top