Java桌面软件最小化的系统托盘(SystemTray)

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();
}

第三,双击托盘中的图标时恢复软件界面并删除托盘图标

(托盘的所有事件操作均在上面在设置系统托盘图标时完成。这里不用写)


如下图所示为软件最小化时的系统托盘:

右击图标发现有右击菜单:

全文结束。



你可能感兴趣的:(Java相关)