Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
请参阅Java语言更改以获取Java SE 9及后续版本中更新的语言功能的摘要。
请参阅JDK发布说明以获取有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息。
系统托盘是桌面的一个特殊区域,用户可以访问当前正在运行的程序。不同的操作系统可能会以不同的方式来称呼此区域。在Microsoft Windows上,系统托盘被称为任务栏状态区域,而在GNU网络对象模型环境(GNOME)桌面中,它被称为通知区域。在K桌面环境(KDE)中,此区域被称为系统托盘。然而,在每个系统上,托盘区域由桌面上运行的所有应用程序共享。
在Java™ SE版本6中引入的java.awt.SystemTray
类表示桌面的系统托盘。可以通过调用静态方法SystemTray.getSystemTray()
来访问系统托盘。在调用此方法之前,可以使用静态方法isSupported()
来检查是否支持系统托盘。如果此平台不支持系统托盘,则isSupported()
方法返回false。如果应用程序尝试在这种情况下调用getSystemTray()
方法,则该方法将抛出java.lang.UnsupportedOperationException
异常。
应用程序无法创建SystemTray
类的实例。只能存在一个在此类中创建的单个实例,并且可以使用getSystemTray()
方法获得此实例。
系统托盘包含一个或多个托盘图标,可以使用add(java.awt.TrayIcon)
方法将它们添加到托盘中。当不再需要它们时,可以使用remove(java.awt.TrayIcon)
方法将它们移除。
add()
方法可能会抛出AWTException
异常。例如,在X-Window桌面上,如果系统托盘不存在,将抛出AWTException
异常。
TrayIcon
类的功能不仅限于在托盘中显示的图标。它还包括文本工具提示、弹出菜单、气球消息和一组与之关联的监听器。一个TrayIcon
对象生成各种鼠标事件,并支持添加相应的监听器以接收这些事件的通知。TrayIcon
类本身处理一些事件。例如,默认情况下,当在托盘图标上执行右键单击时,它会显示指定的弹出菜单。当执行双击时,TrayIcon
对象生成一个ActionEvent
来启动一个应用程序。当鼠标指针悬停在托盘图标上时,会显示工具提示。图标图像会自动调整大小以适应在托盘上为图像分配的空间。
以下示例使用AWT包开发,演示了SystemTray和TrayIcon类的功能。
不幸的是,TrayIcon
类的当前实现对Swing弹出菜单(JPopupMenu
类)的支持有限,并且不能让应用程序使用javax.swing
包的所有功能。针对这个问题的解决方案在Bug Database中有描述,参见Bug ID 6285881。
以下代码片段展示了如何向系统托盘添加托盘图标并应用弹出菜单:
... //检查系统是否支持系统托盘 if (!SystemTray.isSupported()) { System.out.println("系统不支持系统托盘"); return; } final PopupMenu popup = new PopupMenu(); final TrayIcon trayIcon = new TrayIcon(createImage("images/bulb.gif", "托盘图标")); final SystemTray tray = SystemTray.getSystemTray(); // 创建弹出菜单组件 MenuItem aboutItem = new MenuItem("关于"); CheckboxMenuItem cb1 = new CheckboxMenuItem("设置自动调整大小"); CheckboxMenuItem cb2 = new CheckboxMenuItem("设置工具提示"); Menu displayMenu = new Menu("显示"); MenuItem errorItem = new MenuItem("错误"); MenuItem warningItem = new MenuItem("警告"); MenuItem infoItem = new MenuItem("信息"); MenuItem noneItem = new MenuItem("无"); MenuItem exitItem = new MenuItem("退出"); //将组件添加到弹出菜单 popup.add(aboutItem); popup.addSeparator(); popup.add(cb1); popup.add(cb2); popup.addSeparator(); popup.add(displayMenu); displayMenu.add(errorItem); displayMenu.add(warningItem); displayMenu.add(infoItem); displayMenu.add(noneItem); popup.add(exitItem); trayIcon.setPopupMenu(popup); try { tray.add(trayIcon); } catch (AWTException e) { System.out.println("无法添加托盘图标."); } ...
这个示例的完整代码可以在TrayIconDemo.java
文件中找到。该示例还使用了bulb.gif
图片文件。
消除对应用Swing组件的限制将使开发人员能够添加诸如JMenuItem
(带有图像)、JRadioButtonMenuItem
和JCheckBoxMenuItem
等组件。
在SystemTray
类中只能创建一个实例。
方法 | 目的 |
---|---|
add | 向系统托盘添加托盘图标。一旦添加,托盘图标将在系统托盘中显示。托盘图标在托盘中显示的顺序未指定,它取决于平台和实现。 |
getSystemTray | 获取代表桌面托盘区域的 SystemTray 实例。该方法在每个应用程序中始终返回相同的实例。在某些平台上,可能不支持系统托盘。使用 isSupported() 方法检查系统托盘是否受支持。 |
isSupported | 返回当前平台是否支持系统托盘的信息。除了显示托盘图标外,最低限度的系统托盘支持包括弹出菜单(参见 TrayIcon.setPopupMenu(PopupMenu) 方法)或操作事件(参见 TrayIcon.addActionListener(ActionListener) )。 |
一个 TrayIcon
对象表示可以添加到系统托盘的托盘图标。一个 TrayIcon
对象可以有一个工具提示(文本)、一个图像、一个弹出菜单以及一组关联的监听器。
方法 | 目的 |
---|---|
setImageAutoSize | 设置自动调整大小属性。自动调整大小确定托盘图像是否自动调整大小以适应在托盘上为图像分配的空间。默认情况下,自动调整大小属性设置为 false 。 |
setPopupMenu | 为此 TrayIcon 对象设置弹出菜单。如果弹出菜单为 null ,则不会与此 TrayIcon 对象关联任何弹出菜单。 |
setToolTip | 为此 TrayIcon 对象设置工具提示字符串。当鼠标悬停在图标上时,工具提示将自动显示。将工具提示设置为 null 将删除任何工具提示文本。在某些平台上,显示的工具提示字符串可能会被截断;可以显示的字符数取决于平台。 |
示例 | 描述 | 备注 |
---|---|---|
TrayIconDemo |
本节 | 在系统托盘中创建托盘图标,并向托盘图标添加弹出菜单。 |