Изменение размера клиента JScrollPane без прокручивания полос прокрутки - PullRequest
1 голос
/ 14 декабря 2009

У меня есть JScrollpane, который содержит прокручиваемый клиент, который динамически меняет свой размер при использовании приложения. Я хочу, чтобы JScrollPane знал об изменениях , не перемещая область просмотра при изменении размера клиента .

Чтобы уточнить, что я имею в виду: Обратитесь к примеру Java Webstart ScrollDemo2 из статьи Как использовать панели прокрутки от Sun. При щелчке внизу окна частично за пределами окна появляется круг, а полосы прокрутки перемещаются . Это последнее поведение, которое я хочу избежать.

Я предполагаю, что это всего лишь вопрос установки простого флага в одном из множества компонентов, которые участвуют в решении на панели прокрутки, но я просто не могу найти, где он находится. Кто-нибудь знает?

Ответы [ 2 ]

1 голос
/ 15 декабря 2009

Мне удалось решить эту проблему, переопределив стандартное поведение области просмотра в моей JScrollPane. Это может быть решение, которое не подходит для всех, но в моем GUI это работает как шарм.

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){}
  });
0 голосов
/ 14 декабря 2009

Я бы попробовал что-то вроде:

Point p = scrollPane.getViewport().getViewportPosition();
revalidate();
scrollPane.getViewport().setViewportPosition(p);

Возможно, вам потребуется заключить последнюю строку кода в SwingUtilities.invokeLater.

Если это не сработает, может быть, вы сможете отключить / включить область просмотра до и после revalidate ()?

...