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
- 参见:
-
方法总结
修饰符和类型方法描述void添加一个TrayIcon到SystemTray。voidaddPropertyChangeListener(String propertyName, PropertyChangeListener listener) 将PropertyChangeListener添加到特定属性的监听器列表中。getPropertyChangeListeners(String propertyName) 返回与指定属性关联的所有监听的数组。static SystemTray获取表示桌面托盘区域的SystemTray实例。TrayIcon[]返回此应用程序添加到托盘的所有图标的数组。返回托盘图标将在系统托盘中占据的空间大小(以像素为单位)。static boolean返回当前平台是否支持系统托盘。void从SystemTray中删除指定的TrayIcon。voidremovePropertyChangeListener(String propertyName, PropertyChangeListener listener) 从特定属性的监听器列表中删除PropertyChangeListener。
-
方法详情
-
getSystemTray
获取表示桌面托盘区域的SystemTray实例。这总是为每个应用程序返回相同的实例。在某些平台上,可能不支持系统托盘。您可以使用isSupported()方法检查是否支持系统托盘。如果安装了 SecurityManager,则必须授予 AWTPermission
accessSystemTray才能获得SystemTray实例。否则此方法将抛出 SecurityException。- 返回:
-
代表桌面托盘区域的
SystemTray实例 - 抛出:
UnsupportedOperationException- 如果当前平台不支持系统托盘HeadlessException- 如果GraphicsEnvironment.isHeadless()返回trueSecurityException- 如果未授予accessSystemTray权限- 参见:
-
isSupported
public static boolean isSupported()返回当前平台是否支持系统托盘。除了显示托盘图标外,最小系统托盘支持还包括弹出菜单(请参阅TrayIcon.setPopupMenu(PopupMenu))或操作事件(请参阅TrayIcon.addActionListener(ActionListener))。开发人员不应假设支持所有系统托盘功能。要保证托盘图标的默认操作始终可访问,请将默认操作添加到操作监听器和弹出菜单中。有关如何执行此操作的示例,请参阅
example。笔记:在实施
SystemTray和TrayIcon时,strongly recommended 将不同的手势分配给弹出菜单和动作事件。为这两种目的重载手势会造成混淆,并且可能会阻止用户访问其中一个或另一个。- 返回:
false如果不支持系统托盘访问;如果支持最小系统托盘访问,则此方法返回true但不保证当前平台支持所有系统托盘功能- 参见:
-
add
添加一个TrayIcon到SystemTray。添加后,托盘图标在系统托盘中可见。图标在托盘中的显示顺序未指定 - 它取决于平台和实现。应用程序添加的所有图标都会在应用程序退出时以及桌面系统托盘不可用时自动从
SystemTray中删除。- 参数:
trayIcon- 要添加的TrayIcon- 抛出:
NullPointerException- 如果trayIcon是nullIllegalArgumentException- 如果多次添加TrayIcon的同一实例AWTException- 如果桌面系统托盘丢失- 参见:
-
remove
从SystemTray中删除指定的TrayIcon。应用程序添加的所有图标都会在应用程序退出时以及桌面系统托盘不可用时自动从
SystemTray中删除。如果
trayIcon是null或未添加到系统托盘,则不会抛出异常且不会执行任何操作。- 参数:
trayIcon- 要删除的TrayIcon- 参见:
-
getTrayIcons
返回此应用程序添加到托盘的所有图标的数组。您无法访问其他应用程序添加的图标。一些浏览器将不同代码库中的小程序划分为不同的上下文,并在这些上下文之间建立隔离墙。在这种情况下,只会返回从此上下文添加的托盘图标。返回的数组是实际数组的副本,可以在不影响系统托盘的情况下以任何方式进行修改。要从
SystemTray中删除TrayIcon,请使用remove(TrayIcon)方法。- 返回:
- 添加到此托盘的所有托盘图标的数组,如果没有添加则为空数组
- 参见:
-
getTrayIconSize
返回托盘图标将在系统托盘中占据的空间大小(以像素为单位)。开发人员可以使用此方法在创建托盘图标之前获取其图像属性的首选大小。为了方便起见,TrayIcon类中有一个类似的方法TrayIcon.getSize()。- 返回:
- 托盘图标的默认大小,以像素为单位
- 参见:
-
addPropertyChangeListener
将PropertyChangeListener添加到特定属性的监听器列表中。目前支持以下属性:系统托盘属性 属性 Description trayIconsSystemTray的TrayIcon对象数组。该数组通过getTrayIcons()方法访问。当托盘图标添加到系统托盘(或从系统托盘中删除)时,此属性会更改。例如,当系统托盘在桌面上变得不可用并且托盘图标被自动删除时,此属性会更改。systemTray当系统托盘可用时,此属性包含 SystemTray实例,否则包含null。当系统托盘在桌面上可用或不可用时,此属性会更改。该属性由getSystemTray()方法访问。listener仅在此上下文中监听属性更改。如果
listener是null,则不会抛出异常并且不会执行任何操作。- 参数:
propertyName- 指定属性listener- 要添加的属性更改监听器- 参见:
-
removePropertyChangeListener
从特定属性的监听器列表中删除PropertyChangeListener。PropertyChangeListener必须来自此上下文。如果
propertyName或listener为null或无效,则不会抛出异常且不会采取任何操作。- 参数:
propertyName- 指定属性listener- 要删除的 PropertyChangeListener- 参见:
-
getPropertyChangeListeners
返回与指定属性关联的所有监听的数组。仅返回此上下文中的监听。
- 参数:
propertyName- 指定属性- 返回:
-
所有与命名属性关联的
PropertyChangeListener;如果没有添加这样的监听器,或者如果propertyName是null或无效,则返回一个空数组 - 参见:
-