Spec-Zone .ru
спецификации, руководства, описания, API
След: Создание GUI С JFC/Swing
Урок: Использование Других Функций Swing
Как Использовать Системный лоток
Домашняя страница > Создание GUI С JFC/Swing > Использование Других Функций Swing

Как Использовать Системный лоток

Системный лоток является специализированной областью рабочего стола, где пользователи могут получить доступ к в настоящий момент рабочим программам. Эта область может быть упомянута по-другому на различных операционных системах. На Microsoft Windows системный лоток упоминается как область Состояния Панели задач, в то время как на Среде Объектной модели Сети GNU (GNOME) Рабочий стол это упоминается как область уведомлений. На K Настольной среды (KDE) эта область упоминается как Системный лоток. Однако, на каждой системе область лотка совместно используется всеми приложениями, работающими на рабочем столе.

java.awt.SystemTray class, представленный в Java™ SE версия 6, представляет системный лоток для рабочего стола. К системному лотку можно получить доступ, вызывая помехи SystemTray.getSystemTray() метод. Прежде, чем вызвать этот метод, используйте статический метод isSupported() проверять, что системный лоток поддерживается. Если системный лоток не поддерживается на этой платформе, isSupported() метод возвращает false. Если приложение пытается вызвать getSystemTray() метод в таком случае, метод бросит a java.lang.UnsupportedOperationException.

Приложение не может создать экземпляр SystemTray class. Только единственный экземпляр, создаваемый в пределах этого class, может существовать, и этот экземпляр может быть получен, используя getSystemTray() метод.

Системный лоток содержит один или более значков лотка, которые добавляются к лотку, используя add(java.awt.TrayIcon) метод. Они могут быть удалены, когда они больше не необходимы с remove(java.awt.TrayIcon) метод.


Отметьте: add() метод может бросить AWTException если операционная система или Среда выполнения Java решают, что значок не может быть добавлен к системному лотку. Например, AWTException будет брошен рабочими столами X Window, если системный лоток не будет существовать на рабочем столе.

TrayIcon Функциональность class идет вне значка, который выводится на экран в лотке. Это также включает текстовую подсказку, раскрывающееся меню, сообщения баллона, и ряд слушателей, связанных с этим. A TrayIcon объект генерирует различные события от нажатия мыши и поддерживает добавление соответствующих слушателей, чтобы получить уведомление об этих событиях. TrayIcon class обрабатывает некоторые из событий самостоятельно. Например, по умолчанию, когда щелчок правой кнопкой выполняется на значке лотка, он выводит на экран указанное раскрывающееся меню. Когда двойной щелчок выполняется, TrayIcon объект генерирует ActionEvent запустить приложение. Когда парения указателя мыши по значку лотка, подсказка выводится на экран. Изображение значка автоматически изменяется, чтобы соответствовать месту, выделенному для изображения на лотке.

Следующий демонстрационный пример, разработанное использование пакета AWT, демонстрирует функции классов SystemTray и TrayIcon.

Системный лоток с открытым раскрывающимся меню

К сожалению, текущая реализация TrayIcon class оказывает ограниченную поддержку Swing раскрывающееся меню ( JPopupMenu class), и не позволяет приложению использовать все возможности javax.swing пакет. Предложение по обходному решению по этой проблеме описывается в Базе данных Ошибки, см. ID Ошибки 6285881.


Попробуйте это: 
  1. Поместите bulb.gif файл изображения в image каталог. Скомпилируйте и выполните пример, консультируйтесь, пример индексируют.
  2. Значок лотка появится в системном лотке.
    Изображение значка лотка
  3. Двойной щелчок значок лотка, чтобы запустить соответствующее приложение. Диалоговое окно будет выведено на экран.
  4. Парение указатель мыши по значку лотка и щелкает правой кнопкой мыши. Раскрывающееся меню появляется.
  5. Выберите Набор автоматический пункт меню флажка размера. Заметьте, что появление значка изменяется следующим образом.
    Изображение значка лотка изменяется
  6. Выберите пункт меню флажка подсказки Набора. Парение указатель мыши по значку лотка. Подсказка появляется.
  7. Выберите О пункте меню. Диалоговое окно появляется. Закройте диалоговое окно.
  8. Выберите любой из элементов подменю Display. Каждый из этих элементов выводит на экран диалоговое окно сообщения определенного типа: ошибка, предупреждение, информация, или стандарт.
  9. Используйте пункт меню Exit, чтобы выйти из приложения.

Следующий фрагмент кода показывает, как добавить значок лотка к системному лотку и применить раскрывающееся меню:

...
        //Check the SystemTray is supported
        if (!SystemTray.isSupported()) {
            System.out.println("SystemTray is not supported");
            return;
        }
        final PopupMenu pop-up = new PopupMenu();
        final TrayIcon trayIcon =
                new TrayIcon(createImage("images/bulb.gif", "tray icon"));
        final SystemTray tray = SystemTray.getSystemTray();
       
        // Create a pop-up menu components
        MenuItem aboutItem = new MenuItem("About");
        CheckboxMenuItem cb1 = new CheckboxMenuItem("Set auto size");
        CheckboxMenuItem cb2 = new CheckboxMenuItem("Set tooltip");
        Menu displayMenu = new Menu("Display");
        MenuItem errorItem = new MenuItem("Error");
        MenuItem warningItem = new MenuItem("Warning");
        MenuItem infoItem = new MenuItem("Info");
        MenuItem noneItem = new MenuItem("None");
        MenuItem exitItem = new MenuItem("Exit");
       
        //Add components to pop-up menu
        pop-up.add(aboutItem);
        pop-up.addSeparator();
        pop-up.add(cb1);
        pop-up.add(cb2);
        pop-up.addSeparator();
        pop-up.add(displayMenu);
        displayMenu.add(errorItem);
        displayMenu.add(warningItem);
        displayMenu.add(infoItem);
        displayMenu.add(noneItem);
        pop-up.add(exitItem);
       
        trayIcon.setPopupMenu(pop-up);
       
        try {
            tray.add(trayIcon);
        } catch (AWTException e) {
            System.out.println("TrayIcon could not be added.");
        }
...

Полный код для этого демонстрационного примера доступен в TrayIconDemo.java файл. Этот демонстрационный пример также использует bulb.gif файл изображения.

Удаление текущих ограничений на применение компонентов Swing позволит разработчикам добавить такие компоненты как JMenuItem (с изображением), JRadioButtonMenuItem, и JCheckBoxMenuItem.

API SystemTray

Только единственный экземпляр, создаваемый в пределах SystemTray class может существовать.

Метод Цель
добавить Добавляет значок лотка к системному лотку. Значок лотка становится видимым в системном лотке, как только это добавляется. Порядок, в котором значки выводятся на экран в лотке, не определяется — это - платформа - и зависящий от реализации.
getSystemTray Добирается SystemTray экземпляр, который представляет область лотка рабочего стола. Этот метод всегда возвращает тот же самый экземпляр на приложение. На некоторых платформах не может поддерживаться системный лоток. Используйте isSupported() метод, чтобы проверить, поддерживается ли системный лоток.
isSupported Информация о возвратах относительно того, поддерживается ли системный лоток на текущей платформе. В дополнение к отображению значка лотка минимальная поддержка системного лотка включает любого раскрывающееся меню (см. TrayIcon.setPopupMenu(PopupMenu) метод) или событие действия (см. TrayIcon.addActionListener(ActionListener)).

API TrayIcon

A TrayIcon объект представляет значок лотка, который может быть добавлен к системному лотку. A TrayIcon у объекта может быть подсказка (текст), изображение, раскрывающееся меню, и ряд слушателей, связанных с этим.

Метод Цель
setImageAutoSize Устанавливает свойство авторазмера. Авторазмер определяет, измеряется ли изображение лотка автоматически, чтобы соответствовать месту, выделенному для изображения на лотке. По умолчанию свойство авторазмера устанавливается в false.
setPopupMenu Устанавливает раскрывающееся меню для этого TrayIcon объект. Если раскрывающийся null, никакое раскрывающееся меню не будет связано с этим TrayIcon объект.
setToolTip Устанавливает строку подсказки для этого TrayIcon объект. Подсказка выводится на экран автоматически, когда мышь нависает над значком. Установка подсказки к null удаляет любой текст подсказки. Когда выведено на экран, строка подсказки может быть усеченной на некоторых платформах; число символов, которые могут быть выведены на экран, зависимо от платформы.

Примеры, Которые Используют API SystemTray

Следующая таблица приводит пример, который использует значки лотка, добавленные к системному лотку.
Пример Где Описано Примечания
TrayIconDemo Этот раздел Создает значок лотка в системном лотке, добавляет раскрывающееся меню к значку лотка.

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Как Создать Экран-заставку
Следующая страница: Решение Типичных проблем, использующих Другие Функции Swing