Проблема с изменением размера полосы прокрутки JScrollpane

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

  •  19-09-2019
  •  | 
  •  

Вопрос

У меня следующая проблема:

У меня есть JScrollPane, содержащий изображение.

Панель прокрутки находится внутри JPanel вместе с другими компонентами, чтобы можно было разместить все это с помощью BorderLayout (панель прокрутки — это ЦЕНТР, а у меня что-то на ЮГЕ).

Эта JPanel находится в JSplitPane.

JSplitPane наконец-то находится внутри JFrame.

JFrame
{
 JSplitpane
 {
  JPanel(BorderLayout)
  {
   JScrollPane(CENTER)
   {
    BufferedImage
   }

   JPanel(SOUTH)
   {...}
  }
 }
}

Моя проблема сейчас заключается в том, что когда я изменяю размер кадра, изображение в ScrollPane изменяется нормально, пока не достигнет размера изображения.Затем изображение растягивается, чего я хочу предотвратить.Я попытался обернуть JScrollPane в JPanel, который имеет макет FlowLayout.Это отлично работает для изменения размера, но полосы прокрутки исчезают, как только я изменяю размер кадра.

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

Каждый намек ценится.

Ваше здоровье,

Бен

Это было полезно?

Решение

Я считаю, что ты должен вести себя хорошо, если позвонишь setMaximumSize() на JScrollPane с шириной/высотой BufferedImage (но не пробовал).

И в качестве общего комментария:Плохая идея переопределять компоненты Swing только для того, чтобы добавить дочерние элементы.Вместо этого создайте класс контроллера, который создает и составляет базовые компоненты.


Перечитал ваш вопрос и задался вопросом:проблема в том, что изображение растягивается или полосы прокрутки исчезают?Если вы хотите, чтобы полосы прокрутки оставались на экране, даже если прокручивать нечего, взгляните на setVerticalScrollBarPolicy() и setHorizontalScrollBarPolicy() методы.

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