查看: 139726|回复: 293

实现简单系统托盘

[复制链接]
发表于 2015-5-30 15:49:16 | 显示全部楼层 |阅读模式
本帖最后由 xiaoye 于 2015-10-9 17:38 编辑

SystemTray 类表示桌面的系统托盘。
在某些平台上,可能不存在或不支持系统托盘,在这种情况下,getSystemTray() 将抛出 UnsupportedOperationException。所以检查系统托盘是否受支持,使用 isSupported()。
SystemTray 可以包含一个或多个 TrayIcon,可以使用 add(java.awt.TrayIcon) 方法将它们添加到托盘,当不再需要托盘时,使用 remove(java.awt.TrayIcon) 移除它。TrayIcon 由图像、弹出菜单和一组相关侦听器组成。
每个 Java 应用程序都有一个 SystemTray 实例,在应用程序运行时,它允许应用程序与桌面系统托盘建立连接。SystemTray 实例可以通过 getSystemTray() 方法获得。应用程序不能创建自己的 SystemTray 实例。

首先将主界面弄出来。

[Java] 纯文本查看 复制代码
import javax.swing.JFrame;

public class Test1 extends JFrame{
	
	public Test1(){
		setSize(300, 300);
		setVisible(true);
		
	}
	
	public static void main(String[] args) {
		new Test1();
	}

}


接下来编写一个初始化系统托盘的方法。
[Java] 纯文本查看 复制代码
private void SystemTrayInit(){
		if(!SystemTray.isSupported()){//判断该系统是否支持系统托盘,如果不支持则结束方法运行。
			return;
		}
		String title="提示文本标题";
		String company="提示文本";
		SystemTray sys=SystemTray.getSystemTray();//获取系统托盘实例
		tr=new TrayIcon(Toolkit.getDefaultToolkit().createImage("images/icon.jpg"),title+"\n"+company,createMenu());
		tr.setImageAutoSize(true);
		tr.addActionListener(new SysTrayActionListener());添加动作监听
		try {
			sys.add(tr);//将TrayIcon添加到托盘
			tr.displayMessage(title, company, MessageType.INFO);
		} catch (AWTException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}


TrayIcon 对象表示可以添加到系统托盘的托盘图标。TrayIcon 可以包含工具提示(文本)、图像、弹出菜单和一组与之关联的侦听器。
TrayIcon(Image image, String tooltip, PopupMenu popup)
          创建带指定图像、工具提示和弹出菜单的 TrayIcon
Toolkit.getDefaultToolkit().createImage("images/icon.jpg")返回一个Image实列。

接下来是弹出菜单createMenu()
[Java] 纯文本查看 复制代码
private PopupMenu createMenu() { // 创建系统栏菜单的方法
		PopupMenu menu = new PopupMenu();
		MenuItem exitItem = new MenuItem("退出");
		exitItem.addActionListener(new ActionListener() { // 系统栏退出事件
					public void actionPerformed(ActionEvent e) {
						System.exit(0);
					}
				});
		MenuItem openItem = new MenuItem("打开");
		openItem.addActionListener(new ActionListener() {// 系统栏打开菜单项事件
					public void actionPerformed(ActionEvent e) {
						if (!isVisible()) {
							setVisible(true);
							toFront();
						} else
							toFront();
					}
				});
		
		menu.add(publicItem);
		menu.add(openItem);
		menu.addSeparator();
		menu.add(exitItem);
		return menu;
	}


系统栏双击事件
[Java] 纯文本查看 复制代码
class SysTrayActionListener implements ActionListener {// 系统栏双击事件
		public void actionPerformed(ActionEvent e) {
			setVisible(true);
			toFront();
		}
	}



最终代码:
[Java] 纯文本查看 复制代码
import java.awt.AWTException;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.TrayIcon.MessageType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame;
public class Test extends JFrame implements WindowListener{
	TrayIcon tr;
	public Test(){
		setSize(300, 400);
		addWindowListener(this);
		setVisible(true);
		SystemTrayInit();
//		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
	}
	private void SystemTrayInit(){
		if(!SystemTray.isSupported()){
			return;
		}
		String title="提示文本标题";
		String company="提示文本";
		SystemTray sys=SystemTray.getSystemTray();
		tr=new TrayIcon(Toolkit.getDefaultToolkit().createImage("images/icon.jpg"),title+"\n"+company,createMenu());
		tr.setImageAutoSize(true);
		tr.addActionListener(new SysTrayActionListener());
		try {
			sys.add(tr);
			tr.displayMessage(title, company, MessageType.INFO);
		} catch (AWTException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	private PopupMenu createMenu() {
		// TODO Auto-generated method stub
		PopupMenu menu = new PopupMenu();
		MenuItem exitItem = new MenuItem("退出");
		exitItem.addActionListener(new ActionListener() { // 系统栏退出事件
					public void actionPerformed(ActionEvent e) {
						System.exit(0);
					}
				});
		MenuItem openItem = new MenuItem("打开");
		openItem.addActionListener(new ActionListener() {// 系统栏打开菜单项事件
					public void actionPerformed(ActionEvent e) {
						if (!isVisible()) {
							setVisible(true);
							toFront();
						} else
							toFront();
					}
				});
		
		menu.add(openItem);
		menu.addSeparator();
		menu.add(exitItem);
		return menu;
	}
	
	class SysTrayActionListener implements ActionListener {// 系统栏双击事件
		public void actionPerformed(ActionEvent e) {
			setVisible(true);
			toFront();
		}
	}
	public static void main(String[] args) {
		new Test();
		
	}
	@Override
	public void windowOpened(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void windowClosing(WindowEvent e) {
		// TODO Auto-generated method stub
		setVisible(false);
	}
	@Override
	public void windowClosed(WindowEvent e) {
		// TODO Auto-generated method stub
	}
	@Override
	public void windowIconified(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void windowDeiconified(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void windowActivated(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void windowDeactivated(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

}
回复

使用道具 举报

发表于 2015-6-26 20:52:48 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2015-6-27 05:07:08 | 显示全部楼层
感谢楼主的分享~
回复 支持 反对

使用道具 举报

发表于 2015-6-27 05:38:06 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2015-6-27 09:44:40 | 显示全部楼层
感谢楼主的分享~
回复 支持 反对

使用道具 举报

发表于 2015-6-27 16:27:10 | 显示全部楼层
学习学习技术,加油!
回复 支持 反对

使用道具 举报

发表于 2015-6-29 16:30:35 | 显示全部楼层
感谢楼主的分享~
回复 支持 反对

使用道具 举报

发表于 2015-7-1 10:33:26 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2015-7-1 17:05:11 | 显示全部楼层
支持中国红客联盟(ihonker.org)
回复 支持 反对

使用道具 举报

发表于 2015-7-2 11:01:53 | 显示全部楼层
支持,看起来不错呢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

旗下站点

邮箱系统

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2025-3-7 03:05 , Processed in 0.031774 second(s), 12 queries , Gzip On, MemCache On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部