Я делаю компонент загрузки изображения, который состоит из JPanel, содержащей JScrollPane, которая, в свою очередь, содержит другую JPanel. Этот компонент позволяет перетаскивать изображения поверх него, после чего изображение загружается, а внутренняя часть JPanel устанавливается на размер отброшенного изображения. Это, в свою очередь, приводит к появлению полос прокрутки, и пользователь может прокручивать изображение. Это все отлично работает. Проблема возникает, когда я пытаюсь автоматически сжать изображение до максимальной видимой области на внешней JPanel. В этом случае я делаю равномерный масштаб изображения, чтобы он был меньше или равен ширине и высоте внешней JPanel. Теперь происходит то, что горизонтальные и вертикальные полосы прокрутки отображаются, показывая, что внутренняя JPanel больше видимой области (что не должно быть так). Я проверил, что изображение масштабируется до нужных размеров (т.е. соблюдаются максимальная ширина и высота). Я также убедился, что если я уменьшу максимальную высоту на 3 пикселя, полосы прокрутки не появятся.
Я считаю, что проблема в том, что 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);
Спасибо!