Java swing 仿QQ实现系统托盘图标(上)

最近用java swing仿写QQ,想实现QQ图标显示在系统托盘的效果。研究了一下。废话不多说,进入正题。

首先定义窗体:

                //初始化窗体
        JFrame frame=new JFrame("My QQ");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setLocationRelativeTo(null);
        
        ImageIcon img=new ImageIcon(Demo.class.getClassLoader().getResource("res/images/logo.gif"));
        frame.setIconImage(img.getImage());

窗体建好了,准备添加系统托盘图标

                //得到当前系统托盘
		SystemTray systemtray = SystemTray.getSystemTray();
		
		//创建带指定图像、工具提示和弹出菜单的 TrayIcon
		TrayIcon trayicon=new TrayIcon(img.getImage(),"My QQ",pm);
		
		//将TrayIcon添加到系统托盘
		try {
			systemtray.add(trayicon); 
		} catch (AWTException e1) {
			e1.printStackTrace();
		}

但在添加系统托盘图标前还要先定义一下弹出菜单

               //定义弹出菜单
		PopupMenu pm=new PopupMenu();
		
		//定义弹出菜单项
		MenuItem openmenu = new MenuItem("打开主面板");
		MenuItem closemenu = new MenuItem("退出MyQQ");
		MenuItem online = new MenuItem("我在线上");
		MenuItem busy = new MenuItem("忙碌");
		MenuItem invisible= new MenuItem("隐身");
		
		//添加弹出菜单项到弹出菜单
		pm.add(openmenu);
		pm.add(closemenu);
		pm.add(online);
		pm.add(busy);
		pm.add(invisible);

现在来看看效果吧!

Java swing 仿QQ实现系统托盘图标(上)_第1张图片

已经再系统托盘上显示了My QQ的图标了,现在在图标上点击鼠标右键试试,是否能看到有菜单弹出呢?。不过这时鼠标左键还不用用,鉴于一般都是点击鼠标左键显示窗体,下面为TrayIcon添加鼠标监听器。

		//为trayicon添加鼠标监听器
		trayicon.addMouseListener(new MouseAdapter(){ 
			
			public void mouseClicked(MouseEvent e) {
				
				//鼠标左键点击,设置窗体状态,正常显示
				if(e.getButton()==MouseEvent.BUTTON1){
					frame.setExtendedState(JFrame.NORMAL);
				}
			}
		});

现在最小化窗体,鼠标左键点击托盘图标已经可以显示窗体了。但是除了系统托盘外,该程序还在任务栏有显示,看着总是不爽,那么再加上一句

              frame.setType(Window.Type.UTILITY);

终于该程序没有在任务栏显示了,再运行下窗体,好像貌似最小/大化图标没有了,呃,,,

可以去掉窗体装饰,自定义按钮,或者不去任务栏图标吧

             frame.setUndecorated(true);

去掉任务栏显示后,又发现单击鼠标左键不管用了,呃,,一波未平一波又起。。

试试在trayicon监听器里加上frame.setVisible(true);试试吧

		//设置单击击系统托盘图标显示主窗口
		trayicon.addMouseListener(new MouseAdapter(){ 
			
			public void mouseClicked(MouseEvent e) {
				
				//鼠标左键点击,设置窗体状态,正常显示
				if(e.getButton()==MouseEvent.BUTTON1){
					frame.setExtendedState(JFrame.NORMAL);
					frame.setVisible(true);
				}
			}
		});

到这里已经成功添加了系统托盘图标,不过托盘图标的弹出菜单PopupMenu貌似加不上图标,而TrayIcon又不支持JPopupMenu。 。


下次再介绍怎么在系统托盘的弹出菜单上加图标吧

你可能感兴趣的:(java,swing,仿写QQ)