Module java.desktop
Package java.awt

Class SystemTray

java.lang.Object
java.awt.SystemTray

public class SystemTray extends Object
SystemTray类表示桌面的系统托盘。在Microsoft Windows上,它被称为“任务栏状态区”,在Gnome上被称为“通知区域”,在KDE上被称为“系统托盘”。系统托盘由桌面上运行的所有应用程序共享。

在某些平台上,系统托盘可能不存在或不受支持,在这种情况下,getSystemTray()会抛出UnsupportedOperationException。要检测系统托盘是否受支持,请使用isSupported()

SystemTray可能包含一个或多个TrayIcons,这些图标使用add(java.awt.TrayIcon)方法添加到托盘中,并在不再需要时移除,使用remove(java.awt.TrayIcon)TrayIcon包含一个图像,一个弹出菜单和一组相关的监听器。请参阅TrayIcon类了解详情。

每个Java应用程序都有一个SystemTray实例,允许应用程序在运行时与桌面的系统托盘进行交互。可以通过getSystemTray()方法获取SystemTray实例。应用程序可能不会创建自己的SystemTray实例。

以下代码片段演示了如何访问和自定义系统托盘:

 
     TrayIcon trayIcon = null;
     if (SystemTray.isSupported()) {
         // 获取SystemTray实例
         SystemTray tray = SystemTray.getSystemTray();
         // 加载图像
         Image image = Toolkit.getDefaultToolkit().getImage(...);
         // 创建一个动作监听器以监听在托盘图标上执行的默认操作
         ActionListener listener = new ActionListener() {
             public void actionPerformed(ActionEvent e) {
                 // 执行应用程序的默认操作
                 // ...
             }
         };
         // 创建一个弹出菜单
         PopupMenu popup = new PopupMenu();
         // 为默认操作创建菜单项
         MenuItem defaultItem = new MenuItem(...);
         defaultItem.addActionListener(listener);
         popup.add(defaultItem);
         /// ... 添加其他项
         // 构造一个TrayIcon
         trayIcon = new TrayIcon(image, "Tray Demo", popup);
         // 设置TrayIcon属性
         trayIcon.addActionListener(listener);
         // ...
         // 添加托盘图像
         try {
             tray.add(trayIcon);
         } catch (AWTException e) {
             System.err.println(e);
         }
         // ...
     } else {
         // 在应用程序中禁用托盘选项或
         // 执行其他操作
         ...
     }
     // ...
     // 一段时间后
     // 应用程序状态已更改-更新图像
     if (trayIcon != null) {
         trayIcon.setImage(updatedImage);
     }
     // ...
 
 
自版本:
1.6
参见:
  • Method Details

    • getSystemTray

      public static SystemTray getSystemTray()
      获取表示桌面托盘区域的SystemTray实例。每个应用程序始终返回相同的实例。在某些平台上,系统托盘可能不受支持。您可以使用isSupported()方法检查系统托盘是否受支持。

      如果安装了SecurityManager,则必须授予AWTPermission accessSystemTray权限才能获取SystemTray实例。否则,此方法将抛出SecurityException。

      返回:
      表示桌面托盘区域的SystemTray实例
      抛出:
      UnsupportedOperationException - 如果当前平台不支持系统托盘
      HeadlessException - 如果GraphicsEnvironment.isHeadless()返回true
      SecurityException - 如果未授予accessSystemTray权限
      参见:
    • isSupported

      public static boolean isSupported()
      返回当前平台是否支持系统托盘。除了显示托盘图标外,最小的系统托盘支持包括弹出菜单(参见TrayIcon.setPopupMenu(PopupMenu))或动作事件(参见TrayIcon.addActionListener(ActionListener))。

      开发人员不应假设所有系统托盘功能都受支持。为了确保托盘图标的默认操作始终可访问,请将默认操作添加到动作监听器和弹出菜单中。请参阅示例以了解如何执行此操作。

      注意:在实现SystemTrayTrayIcon时,强烈建议为弹出菜单和动作事件分配不同的手势。为两者重载手势会令人困惑,并可能阻止用户访问其中一个。

      返回:
      如果不支持系统托盘访问,则返回false;如果支持最小系统托盘访问,则返回true,但不保证当前平台支持所有系统托盘功能
      参见:
    • add

      public void add(TrayIcon trayIcon) throws AWTException
      添加一个TrayIconSystemTray。一旦添加,托盘图标将在系统托盘中可见。托盘中显示图标的顺序未指定-这取决于平台和实现。

      应用程序添加的所有图标在应用程序退出时会自动从SystemTray中移除,也会在桌面系统托盘不可用时移除。

      参数:
      trayIcon - 要添加的TrayIcon
      抛出:
      NullPointerException - 如果trayIconnull
      IllegalArgumentException - 如果添加了相同实例的TrayIcon多次
      AWTException - 如果桌面系统托盘丢失
      参见:
    • remove

      public void remove(TrayIcon trayIcon)
      SystemTray中移除指定的TrayIcon

      应用程序添加的所有图标在应用程序退出时会自动从SystemTray中移除,也会在桌面系统托盘不可用时移除。

      如果trayIconnull或未添加到系统托盘,则不会抛出异常,也不会执行任何操作。

      参数:
      trayIcon - 要移除的TrayIcon
      参见:
    • getTrayIcons

      public TrayIcon[] getTrayIcons()
      返回此应用程序添加到系统托盘的所有图标的数组。您无法访问另一个应用程序添加的图标。一些浏览器将不同代码库中的小程序分隔成不同的上下文,并在这些上下文之间建立墙壁。在这种情况下,只会返回从此上下文添加的托盘图标。

      返回的数组是实际数组的副本,可以以任何方式修改而不影响系统托盘。要从SystemTray中删除TrayIcon,请使用remove(TrayIcon)方法。

      返回:
      返回添加到此托盘的所有托盘图标的数组,如果没有添加任何图标,则返回空数组
      另请参阅:
    • getTrayIconSize

      public Dimension getTrayIconSize()
      返回托盘图标在系统托盘中占用的像素大小。开发人员可以使用此方法在创建托盘图标之前获取首选大小。为方便起见,在TrayIcon类中还有一个类似的方法TrayIcon.getSize()
      返回:
      托盘图标的默认大小,以像素为单位
      另请参阅:
    • addPropertyChangeListener

      public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)
      向特定属性的监听器列表中添加PropertyChangeListener。当前支持以下属性:
      SystemTray属性
      属性 描述
      trayIcons SystemTrayTrayIcon对象数组。可以通过getTrayIcons()方法访问该数组。当向系统托盘添加(或从中删除)托盘图标时,此属性会更改。例如,当系统托盘在桌面上变得不可用并自动删除托盘图标时,此属性会更改。
      systemTray 当系统托盘可用时,此属性包含SystemTray实例,否则包含null。当系统托盘在桌面上变得可用或不可用时,此属性会更改。可以通过getSystemTray()方法访问该属性。

      listener仅监听此上下文中的属性更改。

      如果listenernull,则不会抛出异常,也不会执行任何操作。

      参数:
      propertyName - 指定的属性
      listener - 要添加的属性更改监听器
      另请参阅:
    • removePropertyChangeListener

      public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener)
      从特定属性的监听器列表中删除PropertyChangeListener

      PropertyChangeListener必须来自此上下文。

      如果propertyNamelistenernull或无效,则不会抛出异常,也不会执行任何操作。

      参数:
      propertyName - 指定的属性
      listener - 要移除的PropertyChangeListener
      另请参阅:
    • getPropertyChangeListeners

      public PropertyChangeListener[] getPropertyChangeListeners(String propertyName)
      返回已与指定属性关联的所有监听器的数组。

      仅返回此上下文中的监听器。

      参数:
      propertyName - 指定的属性
      返回:
      与指定属性关联的所有PropertyChangeListener;如果尚未添加此类监听器或propertyNamenull或无效,则返回空数组
      另请参阅: