Java应用程序使用系统托盘资源
要想使自己开发的Java SE项目运行在自己的电脑系统托盘上,这并不是什么难事,总共需要如下几步即可:
1、线判断一下,系统托盘是否可用,否则接下来的程序将不可避免的报出异常咯
2、获得一个SystemTray,注意我们是通过getSystemTray方法来获取,而不是直接创建一个系统托盘。
3、为我们的托盘创建图标,那么我们不难想到要使用到Image和TrayIcon两个知识点了。先创建一个Image对象实例,然后作为参数添加到TrayIcon的构造方法上,这会用到trayIcon=new TrayIcon(image,“ToolTip String”,popup);方法,其中的popup 是作为弹出菜单,也就是邮件菜单出现的。
4,通过tray来把我们的trayIcon的实例里添加到系统托盘上。这样就大功告成了,是不会感觉很简单啊 。
下面请看代码吧:
public static void main(String []args){
new TimerAndProgressBar();
if(SystemTray.isSupported()){
SystemTray tray=SystemTray.getSystemTray();
Image image=Toolkit.getDefaultToolkit().getImage("E://Important/图片/1171179");
PopupMenu popup=new PopupMenu();
MenuItem item=new MenuItem("弹出菜单");
popup.add(item);
TrayIcon icon=new TrayIcon(image,"系统托盘信息",popup);
try{
tray.add(icon);
}catch(Exception e){
e.printStackTrace();
}
}else{
System.out.println("您无法使用系统托盘,抱歉!");
}
}
还在等什么,快点为你的软件在系统托盘上开辟一个家吧。
下面是别人家的代码,我觉得挺好的一个Demo,一起分享一下吧
package casual;
import java.awt.AWTException;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
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.ImageIcon;
import javax.swing.JFrame;
public class TestTray {
TrayIcon trayIcon; // 托盘图标
SystemTray tray; // 本操作系统托盘的实例
public TestTray() {
final JFrame frame = new JFrame("系统托盘");
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
tray = SystemTray.getSystemTray(); // 获得本操作系统托盘的实例
ImageIcon icon = new ImageIcon("imooc.jpg"); // 将要显示到托盘中的图标
PopupMenu pop = new PopupMenu(); // 构造一个右键弹出式菜单
final MenuItem show = new MenuItem("打开程序");
final MenuItem exit = new MenuItem("退出程序");
pop.add(show);
pop.add(exit);
trayIcon = new TrayIcon(icon.getImage(), "系统托盘", pop);// 实例化托盘图标
// 为托盘图标监听点击事件
trayIcon.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2)// 鼠标双击图标
{
// tray.remove(trayIcon); // 从系统的托盘实例中移除托盘图标
frame.setExtendedState(JFrame.NORMAL);// 设置状态为正常
frame.setVisible(true);// 显示主窗体
}
}
});
// 选项注册事件
ActionListener al2 = new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 退出程序
if (e.getSource() == exit) {
System.exit(0);// 退出程序
}
// 打开程序
if (e.getSource() == show) {
frame.setExtendedState(JFrame.NORMAL);// 设置状态为正常
frame.setVisible(true);
}
}
};
exit.addActionListener(al2);
show.addActionListener(al2);
try {
tray.add(trayIcon); // 将托盘图标添加到系统的托盘实例中
} catch (AWTException ex) {
ex.printStackTrace();
}
// 为主窗体注册窗体事件
frame.addWindowListener(new WindowAdapter() {
// 窗体最小化事件
public void windowIconified(WindowEvent e) {
frame.setVisible(false);// 使窗口不可视
frame.dispose();// 释放当前窗体资源
}
});
}
public static void main(String[] args) {
new TestTray();
}
}
Java应用程序使用系统托盘资源的更多相关文章
- WinForm 程序在系统托盘显示
前言 有些程序在关闭或最小化的时候会隐藏在系统托盘中,双击或右击会重新显示,winform实现其功能很简单,这边就简单的介绍下. 实现 在winform实现托盘使用notifyIcon控件,如果加菜单 ...
- java web 程序---投票系统
1.这里会连接数据库--JDBC的学习实例 一共有3个页面. 2.第一个页面是一个form表单,第二个页面是处理数据,第三个页面是显示页面 vote.jsp <body bgcolor=&quo ...
- Python Flask构建微信小程序订餐系统 学习 资源
一.Flask MVC框架结构 1.1实际项目结构 1.2application.py 项目配置文件Flask之flask-script模块使用 static.py 文件(部署到生成环境不需 ...
- WP7系统托盘和应用程序栏
(一)系统托盘和应用程序栏系统托盘(1)显示系统级别的状态信息(2)Apps能隐藏和显示系统托盘Micosoft.Phone.Shell.SystemTray.IsVisible=true;应用程序栏 ...
- Java应用程序项目的打包与发行
Java应用程序项目的打包与发行 这里主要是讲解一下怎样将 Java程序打包成独立运行的exe程序包,以下这种方法应该是最佳的解决方案了.NetDuke的EXE 程序包了是使用这种方案制作的.在 ...
- java程序加到系统托盘的方法
package swingtest; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; impor ...
- Java程序员开发参考资源
构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化 ...
- MFC程序最小化到系统托盘及其响应函数
预备知识: Windows API函数: WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA pnid ...
- C#编写WIN32系统托盘程序
基本功能概述: 程序运行后驻留系统托盘,左键呼出,右键退出.后续可加右键菜单. 注册系统案件WIN+F10,呼出程序. 重写系统消息,最小化和关闭按钮隐藏程序 using System; using ...
随机推荐
- 新手级配置 react react-router4.0 redux fetch sass
前言 最近公司来了几个实习生,刚好我手头没什么要紧事,然后领导让我带他们学习react, 为下一个react项目做基础. 然后随手写了几个demo,帮助他们了解正经项目如何去构建配置项目. 现在分享出 ...
- Java对象的内存布局以及对象所需内存大小计算详解
1. 内存布局 在HotSpot虚拟机中,对象的内存布局可以分为三部分:对象头(Header). 实例数据(Instance Data)和对齐填充(Padding). 1) 对象头(Header): ...
- 多线程(五) Fork/Join框架介绍及实例讲解
什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架. 我们再通过For ...
- Dynamics CRM 不同的站点地图下设置默认不同的仪表板
CRM的默认仪表板只能设置一个,也就是说每个引用仪表板的站点地图下点开仪表板后都是看到的默认仪表板,例如我下图中的"日常维修仪表板" 那如果我要在不同的站点地图下看到的默认仪表板不 ...
- antlr 4新特性总结及与antlr v3的不同
antlr 4新特性总结及与antlr v3的不同 学习曲线低.antlr v4相对于v3,v4更注重于用更接近于自然语言的方式去解析语言.比如运算符优先级,排在最前面的规则优先级最高: 层次更清晰. ...
- lucene索引库的增删改查操作
1. 索引库的操作 保持数据库与索引库的同步 说明:在一个系统中,如果索引功能存在,那么数据库和索引库应该是同时存在的.这个时候需要保证索引库的数据和数据库中的数据保持一致性.可以在对数据库进行增.删 ...
- 13常用sql语句
创建语句 CREATE table if not exists b(id INTEGER PRIMARY KEY AUTOINCREMENT,waijian int ,FOREIGN KEY (wai ...
- iOS7 CookBook精彩瞬间(二)NSSet、通过Subscript访问类成员等
1.NSSet的用法 ①NSSet是一种无序集合,基于hash实现,可以在线性时间复杂度内查找某个元素,如果要让元素有序,应当使用NSOrderedSet,要让集合可变,与NSArray类似,使用NS ...
- [struts2学习笔记] 第二节 使用Maven搞定管理和构造Struts 2 Web应用程序的七个步骤
本文地址:http://blog.csdn.net/sushengmiyan/article/details/40303897 官方文档:http://struts.apache.org/releas ...
- Cocos2D在Xcode7和iOS 9.2上IMP调用出错
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 原来的代码一直在Xcode6.4上和iOS 8.4上运行,没有 ...