Как установить глобальный значок приложения в Swing?
Вопрос
Я знаю, что могу указать по одному для каждой формы или для корневой формы, а затем он будет распространяться на все дочерние формы, но мне бы хотелось иметь способ переопределить Java Coffee Cup по умолчанию для всех форм, даже для тех, которые Я мог бы забыть.
Какие-либо предложения?
Решение
Вы можете создать корневую форму (под которой, я полагаю, вы имеете в виду JFrame
) быть вашим собственным подклассом JFrame
, и поместите в его конструктор стандартную функциональность, например:
this.setIconImage(STANDARD_ICON);
Здесь вы также можете объединить другие стандартные функции, такие как запоминание показателей окна фрейма в качестве предпочтений пользователя, управление панелями-заставками и т. д.
Любые новые кадры, порожденные этим, также будут экземплярами этого JFrame
подкласс.Единственное, что вам нужно запомнить, это создать экземпляр вашего подкласса вместо JFrame
.Я не думаю, что есть какая-то альтернатива тому, чтобы помнить об этом, но, по крайней мере, теперь это вопрос запоминания подкласса вместо setIconImage
вызов (среди, возможно, других функций).
Другие советы
Есть еще один способ, но это скорее «взлом», чем настоящее исправление....
Если вы распространяете JRE вместе со своим приложением, вы можете заменить ресурс значка кофейной чашки в java exe/dll/rt.jar, где бы он ни находился, на свой собственный значок.Возможно, это не совсем законно, но вполне возможно...
Кроме того, если у вас есть одно «главное» окно и вы правильно установили его значок, то пока вы используете это главное окно в качестве «родителя» для любых классов диалогов, они будут наследовать значок.Однако на любых новых фреймах должен быть установлен значок.
как сказал Пол/Андреас, лучшим выбором будет создание подкласса JFrame.
Расширьте класс JDialog (например, назовите его MyDialog) и установите значок в конструкторе.Тогда все диалоги должны расширять вашу реализацию (MyDialog).