wasw100's Blog
上一篇: 下一篇:
2010年03月28日

java swing程序最小化到托盘区

很多桌面程序需要长时间运行,我们不想一直占用宝贵的任务栏,这时我们需要最小化时把程序放到托盘区,以下就是java中swing程序最小化到托盘区的例子,注释很详细:

package com.wasw100;

import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class TrayTest extends JFrame{

	private JLabel lbHello = new JLabel("Hello World");

	private Image icon;// 托盘图标
	private TrayIcon trayIcon;
	private SystemTray systemTray;// 系统托盘
	private PopupMenu pop = new PopupMenu(); // 构造一个右键弹出式菜单
	private MenuItem exit = new MenuItem("退出程序");
	private MenuItem show = new MenuItem("显示窗口");

	public TrayTest(){

		//托盘图标部分结束
		// icon初始化
		icon = Toolkit.getDefaultToolkit().getImage(
				this.getClass().getResource("icon.gif"));//托盘图标显示的图片

		if (SystemTray.isSupported()) {
			systemTray = SystemTray.getSystemTray();// 获得系统托盘的实例
			trayIcon = new TrayIcon(icon, "鼠标放到托盘图标上的文字", pop);
			// wasw100
			pop.add(show);
			pop.add(exit);

			try {
				systemTray.add(trayIcon); // 设置托盘的图标
			} catch (AWTException e1) {
				e1.printStackTrace();
			}
			addWindowListener(new WindowAdapter() {
				public void windowIconified(WindowEvent e) {
					dispose();// 窗口最小化时dispose该窗口
				}
			});

			trayIcon.addMouseListener(new MouseAdapter() {
				public void mouseClicked(MouseEvent e) {
					if (e.getClickCount() == 1
							&& e.getButton() != MouseEvent.BUTTON3) {// 左击击托盘窗口再现,如果是双击就是e.getClickCount() == 2
						setVisible(true);
						setExtendedState(JFrame.NORMAL);//设置此 frame 的状态。
					}
				}
			});

			show.addActionListener(new ActionListener() { // 点击"显示窗口"菜单后将窗口显示出来

						public void actionPerformed(ActionEvent e) {
							// systemTray.remove(trayIcon); // 从系统的托盘实例中移除托盘图标
							setVisible(true); // 显示窗口
							setExtendedState(JFrame.NORMAL);
						}
					});
			exit.addActionListener(new ActionListener() { // 点击“退出演示”菜单后推出程序

						public void actionPerformed(ActionEvent e) {
							//这里可以写执行退出时执行的操作
							System.exit(0); // 退出程序
						}
					});
		}// 托盘图标部分结束

		//以下是swing程序
		setIconImage(icon);//更改程序图标

		add(lbHello);
		setTitle("hello");
		setSize(200, 150);
		//自动确定窗口位置
		setLocationByPlatform(true);
		//点击关闭按钮能够自动退出
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}

	public static void main(String[] args) {
		new TrayTest();
	}
}

–EOF–

返回顶部