| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: GUI и Java FX приложения > Иконка в JDialog |
| Автор: popov654 28.1.2011, 00:24 |
| Всем доброго времени суток! У меня весьма досадная проблема: в JDialog ни в какую не хочет устанавливаться иконка (методами setIcon() и setIcons(), хотя методы как будто поддерживаются. Тем временем, в JFrame аналогичные методы прекрасно работают. Что я делаю не так? P.S. Есть несколько версий, сейчас поэкспериментирую. Первая - возможно, иконка лучае JDialog только наследуется, и надо каким-то образом указать окно-владелец (owner). Вторая - быть может, устанавливать её надо до первого вывода на экран. И третья - иконки в диалогах вообще не поддерживаются, хотя я в это мало верю. Ваши соображения? |
| Автор: popov654 28.1.2011, 01:11 | ||
| Сам задал, сам отвечаю. Полазил по инету, кое-что почитал. В основном, то, что там написано - по большей части ерунда, настоящее решение я нашёл сам. Что предлагалось: 1. Создать фиктивный неотображаемый JFrame и сделать его хозяином, поставить ему нужную иконку. 2. Использовать JFrame вместо JDialog, модальность эмулировать. 3. Где-то даже предлагали писать собственную отрисовку заголовка. 4. Сделать JDialog resizable - странно, но помогает На самом деле первый вариант самый правильный, но здесь не освещён один важный момент: почему-то при таком варианте можно ставить любую иконку, а не только наследовать родительскую. Лично я просто переписал свои конструкторы, которые не соответствовали этому правилу (их было меньшинство) так, чтобы они принимали порождающий фрейм как аргумент. Теперь дело за малым - добавить в начало одну строку:
Здесь frame - это, разумеется, родительское окно. Вуаля - имеем JDialog, работающий с иконками точно так же, как и JFrame. При этом не надо ничего переопределять и, кроме того, наш диалог может быть nonResizable. |
| Автор: popov654 1.2.2011, 01:38 |
| Маленькое замечание: иконка 32х32, используемая, к примеру, ОС Windows для отображения в широко известной панели, вызываемой по Alt+Tab, у JDialog всегда наследуется от хозяина, даже если задать другую. Однако иконку 16х16 для строки заголовка переопределить вполне можно (и часто даже нужно |