Как мне установить значок приложения глобально в Swing?

Я знаю, что могу указать одну для каждой формы или для корневой формы, и тогда она будет каскадно распространяться на все дочерние формы, но я хотел бы иметь возможность переопределить Java Coffee Cup по умолчанию для всех форм, даже тех, которые Я мог бы забыть.

Какие-либо предложения?

4 ответа

Решение

Вы можете сделать корневую форму (под которой я предполагаю, что вы имеете в виду JFrame) быть вашим собственным подклассом JFrameи поместите стандартную функциональность в его конструктор, такой как:

this.setIconImage(STANDARD_ICON);

Здесь вы также можете объединить другие стандартные вещи, такие как запоминание метрик окна фрейма в качестве пользовательских настроек, управление всплывающими панелями и т. Д.

Любые новые кадры, порожденные этим, также могут быть JFrame подкласс. Единственное, что вы должны помнить, это создать свой подкласс вместо JFrame, Я не думаю, что есть какая-то замена для того, чтобы помнить, чтобы сделать это, но, по крайней мере, теперь нужно помнить подкласс вместо setIconImage вызов (среди, возможно, других функций).

Есть и другой способ, но это скорее "взлом", чем реальное исправление....

Если вы распространяете JRE вместе со своим Приложением, вы можете заменить ресурс значка кофейной чашки в java exe/dll/rt.jar, где бы он ни находился, своим собственным значком. Это может быть не совсем законно, но это возможно...

Кроме того, если у вас есть одно "главное" окно и правильно установлен его значок, при условии, что вы используете это главное окно в качестве "родительского" для любых классов Dialog, они будут наследовать значок. Любые новые фреймы должны иметь иконку на них.

Как сказал Пол / Андреас, подклассы JFrame будут вашим лучшим выбором.

Расширьте класс JDialog (например, назовите его MyDialog) и установите значок в конструкторе. Тогда все диалоги должны расширять вашу реализацию (MyDialog).

Другие вопросы по тегам