Java编写的Swing或AWT桌面软件如何在关闭或者最小化时可以像QQ一样退出到系统托盘(SystemTray)。这里主要用到的类是java.awt.SystemTray和java.awt.TrayIcon。SystemTray表示系统托盘,通过这个类就可以获取操作系统的系统托盘对象。TrayIcon表示系统托盘的图标。在操作系统托盘前首先需要将系统托盘的图标设置好。
1 设置托盘图标(TrayIcon)
第一,新建托盘图标的图片:
Image image = Toolkit.getDefaultToolkit()
.getImage(this.getClass().getResource("Logo_TrayIcon.png"));
第二,设置图标图标的右击菜单:
PopupMenu popup = new PopupMenu();
MenuItem showItem = new MenuItem("显示");
MenuItem exitItem = new MenuItem("退出");
popup.add(showItem);
popup.add(exitItem);
showItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
frame.setVisible(true); //界面可见
frame.setExtendedState(JFrame.MAXIMIZED_BOTH); // 界面全屏
SystemTray.getSystemTray().remove(trayIcon); //托盘图标删除
}
});
exitItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
systemTryToExit(); //退出软件
}
});
第三,新建托盘图标:
TrayIcon trayIcon = new TrayIcon(image, "这是系统托盘", popup);
第四,设置托盘图标双击事件(双击时打开桌面软件并删除托盘图标):
trayIcon.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {// 双击托盘窗口再现
frame.setVisible(true); //界面可见
frame.setExtendedState(JFrame.MAXIMIZED_BOTH); // 界面全屏
SystemTray.getSystemTray().remove(trayIcon); //托盘图标删除
}
}
});
这样系统托盘图标就设置好了,可供调用了。
2 设置系统托盘对象
第一,系统托盘类采用的是单例模式。获取系统托盘对象的方式如下:
SystemTray tray = SystemTray.getSystemTray();
第二,最小化软件时向系统托盘添加系统图标
try {
tray.add(this.trayIcon); //trayIcon是上述的系统托盘图标
} catch (AWTException ex) {
ex.printStackTrace();
}
第三,双击托盘中的图标时恢复软件界面并删除托盘图标
(托盘的所有事件操作均在上面在设置系统托盘图标时完成。这里不用写)
如下图所示为软件最小化时的系统托盘:
右击图标发现有右击菜单:
全文结束。