Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Иконка в JDialog


Автор: popov654 28.1.2011, 00:24
Всем доброго времени суток!
У меня весьма досадная проблема: в JDialog ни в какую не хочет устанавливаться иконка (методами setIcon() и setIcons(), хотя методы как будто поддерживаются. Тем временем, в JFrame аналогичные методы прекрасно работают.
Что я делаю не так?

P.S. Есть несколько версий, сейчас поэкспериментирую. Первая - возможно, иконка лучае JDialog только наследуется, и надо каким-то образом указать окно-владелец (owner). Вторая - быть может, устанавливать её надо до первого вывода на экран. И третья - иконки в диалогах вообще не поддерживаются, хотя я в это мало верю. Ваши соображения?  smile 

Автор: popov654 28.1.2011, 01:11
Сам задал, сам отвечаю.  smile 
Полазил по инету, кое-что почитал.
В основном, то, что там написано - по большей части ерунда, настоящее решение я нашёл сам.
Что предлагалось:
1. Создать фиктивный неотображаемый JFrame и сделать его хозяином, поставить ему нужную иконку.
2. Использовать JFrame вместо JDialog, модальность эмулировать.
3. Где-то даже предлагали писать собственную отрисовку заголовка.
4. Сделать JDialog resizable - странно, но помогает

На самом деле первый вариант самый правильный, но здесь не освещён один важный момент: почему-то при таком варианте можно ставить любую иконку, а не только наследовать родительскую.
Лично я просто переписал свои конструкторы, которые не соответствовали этому правилу (их было меньшинство) так, чтобы они принимали порождающий фрейм как аргумент. Теперь дело за малым - добавить в начало одну строку:

Код

super(frame);


Здесь frame - это, разумеется, родительское окно. Вуаля - имеем JDialog, работающий с иконками точно так же, как и JFrame. При этом не надо ничего переопределять и, кроме того, наш диалог может быть nonResizable.  smile 

Автор: popov654 1.2.2011, 01:38
Маленькое замечание: иконка 32х32, используемая, к примеру, ОС Windows для отображения в широко известной панели, вызываемой по Alt+Tab, у JDialog всегда наследуется от хозяина, даже если задать другую. Однако иконку 16х16 для строки заголовка переопределить вполне можно (и часто даже нужно  smile )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)