Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/40: Рейтинг темы: голосов - 40, средняя оценка - 4.83
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517

ImageIcon: подогнать под нужный размер не обрезав содержимое

16.05.2013, 01:03. Показов 7420. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я отображаю ImageIcon на JLabel, получаеться как-то так:
Java
1
2
3
4
5
        ImageIcon empPhoto;
        String filename = "img/" + "image"+".png";
        empPhoto =  new ImageIcon(filename);
 
        JLabel lblImage = new JLabel(empPhoto);
Ну и дальше вот этот вот lblImage отображается на экране, проблема в том что фото то разные бывают, я хотел бы всегда отображать этот JLabel в формате 3x4 (300x400 на форме), независимо от того какое там разрешение (пускай портится в плане качества, растягивается или сжимается, это ничего, лишь бы не обрезалось), да вот только если я пытаюсь управлять размером лейбла через preffered size / minimum size / maximum size он обрезает картинку, как сделать чтобы он просто её сжимал / растягивал?
Пример: у меня есть формочка с фото и код ограничений на JLabel:
Java
1
2
        lblImage.setMinimumSize(new Dimension(60,80));
        lblImage.setPreferredSize(new Dimension(300,400));
В обычном режиме картинка отображается так:

Но если немного сжать окошко (картинка должна стать 60x80) то получаеться чёрный квадрат так как JLabel обрезал просто содержимое, а мне нужно чтобы он его сжал, а не обрезал.
Пример того как он обрезает:

как видно из скриншота это не маленькое превью предыдущей картинки, а примерно квадрат по центру где был нос.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.05.2013, 01:03
Ответы с готовыми решениями:

Как подогнать размер iframe под содержимое?
Собственно вопрос сфомулирован в теме: Есть iframe с динамическим содержимым. Как узнать его размер: длину и ширину???

Можно ли подогнать размер браузера под размер фонового изображения
Здравствуйте! Подскажите как сделать, чтоб фоновое изображение подходило по ширине к ширине окна браузера? Чтоб оно не дублировалось и не...

Подогнать размер картинки под размер формы
Здравствуйте! Я накладываю изображение на форму, но я столкнулся с проблемой. Мой код:this.BackgroundImage = new...

9
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
16.05.2013, 11:52
Автоматическое масштабирование Вы не сделаете. Вернее, сделаете, но лучше не надо. Это будет ОЧЕНЬ медленно.
1
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
16.05.2013, 11:58  [ТС]
Skipy, ну я хочу два раза сжимать:
1)Исходное 300x400
Кстати чтобы получить его огород городить не пришлось
Java
1
2
            Image photoPreviewBig =
                    empPhoto.getScaledInstance(300, 400, Image.SCALE_SMOOTH);
2)Мини превью когда окно сжимают так что JLabel с IconImage (где у меня мой photoPreviewBig) не помещаеться (те под JLabel места меньше чем 300x400) то тогда показываеться мини превью 60x80.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
16.05.2013, 12:06
Цитата Сообщение от Gepar Посмотреть сообщение
2)Мини превью когда окно сжимают так что JLabel с IconImage (где у меня мой photoPreviewBig) не помещаеться (те под JLabel места меньше чем 300x400) то тогда показываеться мини превью 60x80.
Слишком сложно. Я бы определил один размер, достаточный для просмотра, типа 120х160, и зафиксировал его. Намучаетесь, честное слово.

Как сделать, подскажу, конечно, но... Создаете сразу оба изображения, нужного размера. Вешаете ComponentListener, при изменении размера проверяете - если прошли пороговый, меняете иконку. Растяните только JLabel на всю его область, чтобы он размер менял вместе с формой.
1
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
16.05.2013, 12:47
Цитата Сообщение от Skipy Посмотреть сообщение
Слишком сложно. Я бы определил один размер, достаточный для просмотра, типа 120х160, и зафиксировал его. Намучаетесь, честное слово.
можно серию нагенерить из 5 картинок и свичить их по мере достижения порога, будет даже похоже на авторесайз
не думаю что сильно просадит перформанс если это сделать в 5 потках
1
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
16.05.2013, 13:38
Да картинки-то сгенерируются быстро, и меняться будут быстро. Я имел в виду реакцию на каждое событие по изменению размера и, соответственно, генерацию изображения под это изменение.
1
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
16.05.2013, 15:15  [ТС]
Цитата Сообщение от mutagen Посмотреть сообщение
можно серию нагенерить из 5 картинок и свичить их по мере достижения порога, будет даже похоже на авторесайз
не думаю что сильно просадит перформанс если это сделать в 5 потках
Я это хотел, но для двух: 1 большая когда влазит, другая маленькая (60x80) когда окошко сжали что большая не влезла, только я не знаю как это сделать. Что мне ловить за события? JLabel как-то у меет говорить "меня сжали" ?

Добавлено через 34 секунды
Цитата Сообщение от Skipy Посмотреть сообщение
бы определил один размер, достаточный для просмотра, типа 120х160, и зафиксировал его.
Сейчас я так и сделал.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
16.05.2013, 17:04
Цитата Сообщение от Gepar Посмотреть сообщение
только я не знаю как это сделать. Что мне ловить за события? JLabel как-то у меет говорить "меня сжали" ?
Э-э-э... мне на секунду показалось, что я всё расписал.

Цитата Сообщение от Skipy Посмотреть сообщение
Вешаете ComponentListener, при изменении размера проверяете - если прошли пороговый, меняете иконку. Растяните только JLabel на всю его область, чтобы он размер менял вместе с формой.
1
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
16.05.2013, 19:58  [ТС]
Skipy, я не понял что слушать на предмет изменения размеров, неужели само окно ?
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
17.05.2013, 12:06
Цитата Сообщение от Gepar Посмотреть сообщение
Skipy, я не понял что слушать на предмет изменения размеров, неужели само окно ?
Изменения размера какой компоненты должны привести к масштабированию изображения? Мне почему-то кажется - той, куда это изображение вставлено.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.05.2013, 12:06
Помогаю со студенческими работами здесь

Подогнать размер изображения под размер PictureBox
Как изменить размер изображения при открытии? А то когда я добавляю в пикчер бокс, они обычно бывают не того разрешения и либо вылазят...

Подогнать размер TextBox под размер текста
Всем привет! Есть проблема. У меня получается только фиксированный размер TextBox, мне нужно чтобы он принимал размер текста. Загружаю...

Как подогнать под экран содержимое формы?
Здравствуйте! На странице на ширине монитора в 320px, если кликнуть кнопку "Заказ в 1 клик" возникает форма, ширина элементов...

Подогнать ширину ячейки StringGrid под содержимое
В одной ячейке таблицы должно аккуратно вмещаться несколько слов. У меня получается так, что текст вылазит за края. Как растянуть отдельно...

Подогнать текст под размер окна
Как вывести текст в окне graphabc так чтобы он был под размер окна, то есть чтобы не приходилось растягивать окно и тп


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru