Проблема с изменением размера полосы прокрутки JScrollpane
-
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()
методы.