2017-02-21 9 views
-1

У меня есть ссылка, объясняющую Stretch Icon и содержит код https://tips4java.wordpress.com/2012/03/31/stretch-icon/Как использовать Stretch значок, чтобы заполнить панель

Я действительно пытался понять это и пытался несколько раз, чтобы осуществить это, но без успеха. Я столкнулся с этой проблемой:

https://i.stack.imgur.com/R4SlO.png

Я хочу зеленую часть (траву), чтобы заполнить JPanel Восток.

Итак, может кто-нибудь объяснить мне, как использовать класс StretchIcon.

Спасибо за ваше время

+0

Возможно, вы также захотите предоставить примерный пример, который демонстрирует вашу проблему. – MadProgrammer

+0

Я бы представлял себе что-то вроде 'add (новый JLabel (новый StretchIcon (getClass(). GetResource ("/Images/farmer.png "))), BorderLayout.EAST); ' – MadProgrammer

+0

Я попробовал, но не добавил изображение – Samer34

ответ

2

по умолчанию для StretchIcon является пропорционально масштабировать изображение. Поскольку размер «восточной» области не в том же соотношении, что и ваш образ, это не сработает.

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

JLabel label = new JLabel(new StretchIcon("...", false)); 
label.setPreferredSize(new Dimension(200, 1)); 
add(label, BorderLayout.LINE_START); 

Примечания Вы должны дать «предпочтительную ширину» намек так BorderLayout будет знать, сколько места для резервирования на восточной стороне панели.

Кроме того, обратите внимание, что лучше использовать увеличенное изображение и масштабировать его меньше, чтобы вы не получили пикселизацию.

+0

Спасибо за ваш asnwer, но вся идея заключалась в том, что я не хотел использовать setPreferredSize, поскольку Frame можно открыть на разных мониторы. Поэтому я могу настроить его на один монитор, но когда я передаю его на более крупный. Он автоматически не заполняет – Samer34

+0

@ Samer34, то есть работает 'BorderLayout'. Области «восток» и «запад» являются фиксированной шириной. Все дополнительное пространство идет в центр. 'StretchIcon' будет правильно заполняться при добавлении в' CENTER' BorderLayout. Если вы хотите, чтобы все области динамически изменялись, вам нужно использовать другой менеджер макетов. Проблема не в 'StretchIcon', проблема в вашем менеджере макетов. На ваш вопрос о том, как использовать 'StretchIcon', был дан ответ. Определение соответствующего размера этикетки - это другая проблема, основанная на ваших особых требованиях. – camickr

+0

Спасибо, я получил его сейчас – Samer34