2010-04-30 1 views
0

Я создаю компонент загрузки изображения, который состоит из JPanel, содержащего JScrollPane, который, в свою очередь, содержит еще один JPanel. Что делает этот компонент, так это позволяет удалять изображения поверх него, после чего изображение загружается, а внутренняя часть JPanel установлена ​​на размер снижаемого изображения. Это, в свою очередь, приводит к появлению полос прокрутки, и пользователь может прокручивать изображение. Все это прекрасно работает. Проблема возникает, когда я пытаюсь автоматически сжимать изображение до максимальной видимой области во внешнем JPanel. В этом случае я делаю единую шкалу изображения меньше или равно ширине и высоте внешнего JPanel. Что происходит сейчас, так это то, что отображаются как горизонтальные, так и вертикальные полосы прокрутки, указывающие, что внутренний JPanel больше видимой области (что не должно быть так). Я проверил, что изображение масштабируется до правильных размеров (т. Е. Соблюдаются максимальная ширина и высота). Я также подтвердил, что если я уменьшу максимальную высоту на 3 пикселя, то полосы прокрутки не появятся.Неправильная калибровка JPanel в JScrollPane В Java 1.5

Что я считаю проблемой, является то, что panel.getWidth() и panel.getHeight() фактически не возвращают видимую область (максимальную область), которую могут использовать подкомпоненты. То есть. вероятно, будет больше ширины и высоты, занимаемой границей вокруг JPanel или что-то в этом роде.

Мой вопрос в том, как мне обойти эту проблему. Функционально все, что я хочу, - это определить максимальный размер JPanel в JScrollPane, затем установить панель на этот размер и нарисовать изображение поверх нее и быть уверенным, что полосы прокрутки панели прокрутки не будут отображаться. Прямо сейчас полосы прокрутки установлены в AS_NEEDED.

Вот часть кода:

JPanel. Insets insets = getInsets(); 
int width = getWidth() - insets.left - insets.right; 
int height = getHeight() - insets.top - insets.bottom; 
imageScaled = ImageUtils.uniformScaleImage(imageOriginal, width, height); 

Спасибо!

ответ

1

Функционально все, что я хочу, чтобы определить максимальный размер JPanel может быть в JScrollPane

scrollPane.getViewport().getViewSize(); 
+0

Спасибо, но, к сожалению, это дает мне размер контейнера внутри JScrollPane. Я хочу, чтобы размер области просмотра области прокрутки. То есть. Я хочу ширину и высоту, чтобы я мог сделать внутреннюю JPanel (внутри области прокрутки), которая поместится внутри панели прокрутки, не создавая полосы прокрутки, если они установлены в AS_NEEDED. Я надеюсь, что в этом есть смысл. – Coder

+0

Затем используйте viewport.getSize(). Я думал, что те, где то же самое, но, видимо, нет. Или, возможно, размер его. Во всяком случае, ответ, который вы ищете, содержится в методах просмотра. – camickr

+0

спасибо, я попробую те – Coder

Смежные вопросы