JScrollPane: перекрасить закадровое изображение - PullRequest
1 голос
/ 14 марта 2012

У меня есть компонент JScrollPane:

    scroller = new JScrollPane();
    scroller.getViewport().add(bigPanel);
    scroller.getViewport().setDoubleBuffered(true);

bigPanel раскрашен в bufferedImage, который отображается при запуске, и все выглядит хорошо.Я могу прокручивать вверх и вниз без проблем.Однако, когда я увеличиваю bigPanel, он обновляет bufferedImage, но сохраняет только ту часть, которая видна в JScrollPane (с правильными размерами, только содержимое за пределами экрана пустое).

Я пытался обновить буферизованное изображение при прокруткеизменение полосы, которое ужасно дорого и приводит к тому, что изображение отображается с белыми полосами между ...

   scroller.getVerticalScrollBar().addAdjustmentListener(this);

Итак, есть ли способ, как нарисовать компонент так, как это делается в начале илилучше написать свой собственный скроллер?

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

1 Ответ

2 голосов
/ 14 марта 2012

Одним из подходов является масштабирование старого BufferedImage с использованием drawImage(), в то время как getValueIsAdjusting() остается верным.Пересматривайте BufferedImage только после прекращения регулировки.Если обновление занимает много времени, дополнительные обновления могут стоить усилий.

...