模块 java.desktop
 java.awt

类 SystemTray

java.lang.Object
java.awt.SystemTray

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

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

SystemTray 可能包含一个或多个 TrayIcons ,它们使用 add(java.awt.TrayIcon) 方法添加到托盘,并在不再需要时使用 remove(java.awt.TrayIcon) 删除。 TrayIcon 由一个图像、一个弹出菜单和一组关联的监听器组成。有关详细信息,请参阅 TrayIcon 类。

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

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

 
   TrayIcon trayIcon = null;
   if (SystemTray.isSupported()) {
     // get the SystemTray instance
     SystemTray tray = SystemTray.getSystemTray();
     // load an image
     Image image = Toolkit.getDefaultToolkit().getImage(...);
     // create a action listener to listen for default action executed on the tray icon
     ActionListener listener = new ActionListener() {
       public void actionPerformed(ActionEvent e) {
         // execute default action of the application
         // ...
       }
     };
     // create a popup menu
     PopupMenu popup = new PopupMenu();
     // create menu item for the default action
     MenuItem defaultItem = new MenuItem(...);
     defaultItem.addActionListener(listener);
     popup.add(defaultItem);
     /// ... add other items
     // construct a TrayIcon
     trayIcon = new TrayIcon(image, "Tray Demo", popup);
     // set the TrayIcon properties
     trayIcon.addActionListener(listener);
     // ...
     // add the tray image
     try {
       tray.add(trayIcon);
     } catch (AWTException e) {
       System.err.println(e);
     }
     // ...
   } else {
     // disable tray option in your application or
     // perform other actions
     ...
   }
   // ...
   // some time later
   // the application state has changed - update the image
   if (trayIcon != null) {
     trayIcon.setImage(updatedImage);
   }
   // ...
  
 
自从:
1.6
参见:
  • 方法详情

    • 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) )。

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

      笔记:在实施 SystemTrayTrayIcon 时,strongly recommended 将不同的手势分配给弹出菜单和动作事件。为这两种目的重载手势会造成混淆,并且可能会阻止用户访问其中一个或另一个。

      返回:
      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 添加到特定属性的监听器列表中。目前支持以下属性:
      系统托盘属性
      属性 Description
      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 或无效,则返回一个空数组
      参见: