查看: 116302|回复: 293

实现简单系统托盘

[复制链接]
  • TA的每日心情
    奋斗
    2023-9-8 11:45
  • 签到天数: 138 天

    [LV.7]常住居民III

    发表于 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 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-3-4 11:35
  • 签到天数: 3 天

    [LV.2]偶尔看看I

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

    使用道具 举报

  • TA的每日心情
    郁闷
    2016-4-13 21:38
  • 签到天数: 1 天

    [LV.1]初来乍到

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

    使用道具 举报

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

    本版积分规则

    指导单位

    江苏省公安厅

    江苏省通信管理局

    浙江省台州刑侦支队

    DEFCON GROUP 86025

    旗下站点

    邮箱系统

    应急响应中心

    红盟安全

    联系我们

    官方QQ群:112851260

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

    官方核心成员

    Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

    GMT+8, 2024-5-17 19:01 , Processed in 0.026467 second(s), 16 queries , Gzip On, MemCache On.

    Powered by ihonker.com

    Copyright © 2015-现在.

  • 返回顶部