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 Summary
Modifier and TypeMethodDescriptionvoid
添加一个TrayIcon
到SystemTray
。void
addPropertyChangeListener
(String propertyName, PropertyChangeListener listener) 向特定属性的监听器列表中添加一个PropertyChangeListener
。getPropertyChangeListeners
(String propertyName) 返回与指定属性关联的所有监听器的数组。static SystemTray
获取表示桌面托盘区域的SystemTray
实例。TrayIcon[]
返回此应用程序添加到托盘中的所有图标的数组。返回托盘图标在系统托盘中占用的像素大小。static boolean
返回当前平台是否支持系统托盘。void
从SystemTray
中移除指定的TrayIcon
。void
removePropertyChangeListener
(String propertyName, PropertyChangeListener listener) 从特定属性的监听器列表中移除一个PropertyChangeListener
。
-
Method Details
-
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)
)。开发人员不应假设所有系统托盘功能都受支持。为了确保托盘图标的默认操作始终可访问,请将默认操作添加到动作监听器和弹出菜单中。请参阅
示例
以了解如何执行此操作。注意:在实现
SystemTray
和TrayIcon
时,强烈建议为弹出菜单和动作事件分配不同的手势。为两者重载手势会令人困惑,并可能阻止用户访问其中一个。- 返回:
-
如果不支持系统托盘访问,则返回
false
;如果支持最小系统托盘访问,则返回true
,但不保证当前平台支持所有系统托盘功能 - 参见:
-
add
添加一个TrayIcon
到SystemTray
。一旦添加,托盘图标将在系统托盘中可见。托盘中显示图标的顺序未指定-这取决于平台和实现。应用程序添加的所有图标在应用程序退出时会自动从
SystemTray
中移除,也会在桌面系统托盘不可用时移除。- 参数:
-
trayIcon
- 要添加的TrayIcon
- 抛出:
-
NullPointerException
- 如果trayIcon
为null
-
IllegalArgumentException
- 如果添加了相同实例的TrayIcon
多次 -
AWTException
- 如果桌面系统托盘丢失 - 参见:
-
remove
从SystemTray
中移除指定的TrayIcon
。应用程序添加的所有图标在应用程序退出时会自动从
SystemTray
中移除,也会在桌面系统托盘不可用时移除。如果
trayIcon
为null
或未添加到系统托盘,则不会抛出异常,也不会执行任何操作。- 参数:
-
trayIcon
- 要移除的TrayIcon
- 参见:
-
getTrayIcons
返回此应用程序添加到系统托盘的所有图标的数组。您无法访问另一个应用程序添加的图标。一些浏览器将不同代码库中的小程序分隔成不同的上下文,并在这些上下文之间建立墙壁。在这种情况下,只会返回从此上下文添加的托盘图标。返回的数组是实际数组的副本,可以以任何方式修改而不影响系统托盘。要从
SystemTray
中删除TrayIcon
,请使用remove(TrayIcon)
方法。- 返回:
- 返回添加到此托盘的所有托盘图标的数组,如果没有添加任何图标,则返回空数组
- 另请参阅:
-
getTrayIconSize
返回托盘图标在系统托盘中占用的像素大小。开发人员可以使用此方法在创建托盘图标之前获取首选大小。为方便起见,在TrayIcon
类中还有一个类似的方法TrayIcon.getSize()
。- 返回:
- 托盘图标的默认大小,以像素为单位
- 另请参阅:
-
addPropertyChangeListener
向特定属性的监听器列表中添加PropertyChangeListener
。当前支持以下属性:SystemTray属性 属性 描述 trayIcons
SystemTray
的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
或无效,则返回空数组 - 另请参阅:
-