JLabel получава изображение

Има ли по-добър начин да получите иконата на JLabel в контейнер като BufferedImage без множество отливки?

Component[] components = container.getComponents();
BufferedImage image = ((BufferedImage) ((ImageIcon) ((JLabel) components[i]).getIcon()).getImage());

person Sp0tlight    schedule 29.06.2013    source източник
comment
Да, използвайте референтни променливи вместо потенциално опасните getComponents(). т.е. myLabel.getIcon().getImage().   -  person Hovercraft Full Of Eels    schedule 30.06.2013
comment
Хм, не мисля, че мога да използвам препратки. Имам нужда от изображението вътре в метода layoutContainer(Container container), внедрен от моя layoutManager, за да го мащабирам пропорционално на останалата част от GUI.   -  person Sp0tlight    schedule 30.06.2013
comment
Имаме случай на промяна на изискванията. Помислете дали да ни кажете повече информация, достатъчно, за да можем да разберем напълно и да отговорим на въпроса ви. Моля, погледнете тук: Jon Skeet : Писане на идеалния въпрос.   -  person Hovercraft Full Of Eels    schedule 30.06.2013
comment
Бих искал да внедря персонализиран мениджър на оформлението за моя графичен интерфейс. В метода layoutContainer(Container container) трябва да мащабирам всеки компонент. Някои от моите JLabel съдържат изображение, така че трябва да мащабирам и изображенията. Просто се чудя дали мога да избегна толкова много отливки или по-скоро да намеря друг метод за мащабиране на изображения вътре в JLabel.   -  person Sp0tlight    schedule 30.06.2013
comment
@Sp0tlight Това не е отговорност на мениджъра на оформлението (да мащабира изображенията), това е отговорност на компонента   -  person MadProgrammer    schedule 30.06.2013
comment
Следователно трябва ли да създам подклас на JLabel и да внедря метод scaleImage, който извиквам в моя LayoutManager? т.е. if(comp instanceof MySuclass)comp.scaleImage();   -  person Sp0tlight    schedule 30.06.2013
comment
Вероятно бих се насочил към подкласиране на ImageIcon, за да направя мащабирането (етикетът няма много работа да отгатва картината на своята икона) Любопитно: защо изобщо трябва да мащабирате? Би ли било опция да оставите потребителския интерфейс/оформлението сам и да направите трансформацията в LayerUI?   -  person kleopatra    schedule 30.06.2013
comment
Трябва да създам графичен интерфейс, зависим от разделителната способност, където изображенията трябва да се мащабират пропорционално на размера на прозореца за изглед на потребителите. Искате да кажете, че трябва да показвам изображенията в LayerUI, вместо да ги добавя към JLabel в JPanel?   -  person Sp0tlight    schedule 30.06.2013


Отговори (1)


За да получите буферирано изображение от JLabel, правите следното (което е зададено от вашия първоначален отговор):

Icon icon = label.getIcon();
BufferedImage bi = new BufferedImage(icon.getIconWidth(),
                icon.getIconHeight(),BufferedImage.TYPE_INT_RGB);
person nook    schedule 11.10.2013