Системный трей с Java

Я настроил свою программу так, чтобы она отображалась на панели задач, выполнив что Oracle сказали сделать. Мой первый вопрос касается иконы. У меня много программ в системном трее, а моя скрыта. Могу ли я сделать так, чтобы он отображался на панели без необходимости нажимать стрелку в трее?

Я также понял, что могу отобразить сообщение, вызвав trayIcon.displayMessage(title, content, icon). Интересно, смогу ли я изменить внешний вид воздушного шара так, как это сделал Skype.

введите здесь описание изображения

Или мне нужно использовать что-то еще, чтобы отображать сообщение? Он должен всегда отображаться перед всеми приложениями и не должен мешать другим приложениям. Например, если пользователь играет в игру, информационное диалоговое окно не должно отвлекать внимание от мыши и клавиатуры.


person MikkoP    schedule 29.12.2012    source источник


Ответы (2)


Нет, вы не можете изменить стиль всплывающего окна с помощью механизма java systray. Skype не использует механизм Java для отображения панели задач. Задача системы — стилизовать и отобразить всплывающую подсказку.

Чтобы показать свой значок, это конфигурация Windows - когда вы нажимаете стрелку, появляется ссылка «настроить», где вы можете настроить отображаемые значки.

Если вы хотите повлиять на стиль окна, вам нужно реализовать свой собственный фрейм, который выглядит и позиционируется как информационное окно системного трея. И вы бы не использовали классы Tray.

person burna    schedule 29.12.2012
comment
Спасибо за Ваш ответ. Если я хочу нарисовать пользовательское всплывающее предупреждение в правом нижнем углу, что мне нужно знать? Есть ли у вас какие-либо подсказки, чтобы сказать, что искать? Кстати, способ SystemTray не работает, когда у вас включен полноэкранный режим. - person MikkoP; 30.12.2012
comment
Я бы попытался показать JFrame в правом нижнем углу. Поэтому я бы искал, как получить эти координаты. К сожалению, это всегда будет выглядеть как поворотная рама, если только вы не нарисуете свой собственный графический компонент. - person burna; 30.12.2012
comment
Но не будет ли это мешать другим приложениям? Или есть способ открыть JFrame, не получая фокус от клавиатуры и мыши? - person MikkoP; 30.12.2012
comment
Кроме того, открытие JFrame будет рассматриваться как программа, и появится строка состояния, которая начнет мигать. - person MikkoP; 30.12.2012
comment
Да, тогда свинг JFrame не решение. Может быть, это предлагает другой фреймворк, я не делал этого раньше, извините. - person burna; 30.12.2012
comment
Мне удалось сделать это с JPanel (JFrames появляются на панели задач, JPanels нет). Я установил его так, чтобы он всегда был наверху, и остановил его от получения фокуса с помощью setFocusableWindowState. Размер экрана я получил с помощью GraphicsEnvironment и рассчитал положение (ширина - ширина диалога, высота - высота диалога). Спасибо! - person MikkoP; 30.12.2012

Относительно вашего вопроса о скиннинге. Выноска SystemTray displayMessage никак не может быть настроена.

person Werner Kvalem Vesterås    schedule 29.12.2012