swing 托盘
直接上方法,
不过有些问题要注意,最后会说明!
private void systemTray() {
if (SystemTray.isSupported()) { // 判断系统是否支持托盘功能.
// 创建托盘右击弹出菜单
PopupMenu popupMenu = new PopupMenu(); //创建弹出菜单中的退出项
MenuItem itemExit = new MenuItem("Exit");
itemExit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
popupMenu.add(itemExit); //创建托盘图标
ImageIcon icon = new ImageIcon(getClass().getResource("image/timg.jpg"));
// 创建图片对象
TrayIcon trayIcon = new TrayIcon(icon.getImage(), "Scan Upload",
popupMenu);
//这句话很重要,不然托盘图标不显示!!!
trayIcon.setImageAutoSize(true);
trayIcon.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
TwainADF_VerificationForm.this.setVisible(true);
}
}); //把托盘图标添加到系统托盘
//这个可以点击关闭之后再放到托盘里面,在此是打开程序直接显示托盘图标了
try {
SystemTray.getSystemTray().add(trayIcon);
} catch (AWTException e1) {
e1.printStackTrace();
}
}
}
JDialog 取消右上角关闭事件
this.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
PS:
1 图片显示空白
trayIcon.setImageAutoSize(true);这句话必须要要
2 图片存放路径问题:
在这个类的同级,创建image文件夹,图片塞进去。
然后复制到 target目录,一样复制一份到同样的类的同级
3 取消和隐藏JDialog关闭按钮
方法1, 禁用关闭
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
方法2, 隐藏
dialog.setUndecorated(true);
4 托盘图片切换
PopupMenu popupMenu = new PopupMenu();
//默认/选中 字体
Font defaultFont=new Font("宋体", Font.PLAIN,12);
Font selectFont=new Font("宋体", Font.BOLD,20);
MenuItem itemSimple = new MenuItem("Simple");
MenuItem itemMulti = new MenuItem("Multi");
MenuItem itemExit = new MenuItem("Exit"); //单个打印菜单
itemSimple.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppConfig.uploadFileType=1;
//改变字体
Font fontSimple=new Font("宋体", Font.BOLD,20);
itemSimple.setFont(selectFont);
itemMulti.setFont(defaultFont);
//改变托盘图标
trayIcon.setImage(new ImageIcon(getClass().getResource("image/image-regular.png")).getImage());
}
});
popupMenu.add(itemSimple); //多个打印菜单
itemMulti.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppConfig.uploadFileType=2;
//改变字体
Font fontMulti=new Font("宋体", Font.BOLD,20);
itemMulti.setFont(selectFont);
itemSimple.setFont(defaultFont);
//改变托盘图标
trayIcon.setImage(new ImageIcon(getClass().getResource("image/images-regular.png")).getImage());
}
});
popupMenu.add(itemMulti);
swing 托盘的更多相关文章
- Java Swing 托盘闪烁Demo实例
桌面程序当中,托盘显示是一个常用的功能. C#的WinForm程序要实现托盘是挺轻松的,而Java Swing要实现这个功能虽然也不难, 但是由于Java Swing开发者或许没有C#多,所以看到很多 ...
- Swing实现系统托盘
/* 实现系统托盘化 */ protected void setToolSystemTray() { // 系统是否支持系统托盘 if (SystemTray.isSupported()) { // ...
- 用swing也可以做出好看的界面
用Swing做出的例子:JavaFX做出的界面:后来又做出了自己编写的一套基于Synth的L&F,其与直接在代码中重绘某个组件不同,最大优点是具有可插拔性,即在不改变原有程序代码的情况下,用户 ...
- Swing 窗口的最小化到系统图标与还原
2014年2月26日 13:01:47 一个上午的功夫,终于折腾好了. 上午主要是卡在监听事件的参数问题.当时脑子不好使,忘记事件是自己构造的,傻傻的测试了半天,如何传递窗口的参数 等中午解决的时候, ...
- Java应用程序使用系统托盘资源
要想使自己开发的Java SE项目运行在自己的电脑系统托盘上,这并不是什么难事,总共需要如下几步即可: 1.线判断一下,系统托盘是否可用,否则接下来的程序将不可避免的报出异常咯 2.获得一个Syste ...
- java 菜单 中文 乱码问题解决方案(使用idea/eclipse) swing MenuItem乱码
java swing MenuItem乱码 2016年12月30日 13:32:08751人阅读 评论(0) 收藏 举报 用java开发一个带有托盘图标的程序, 其它模块的中文显示都是正常的,比如 ...
- Atitit. 悬浮窗口的实现 java swing c# .net c++ js html 的实现
Atitit. 悬浮窗口的实现 java swing c# .net c++ js html 的实现 1. 建立悬浮窗口引用代码 1 1.1. 定义悬浮窗口,设置this主窗口引用,是为了在悬浮窗口中 ...
- atitit.系统托盘图标的设计java swing c# .net c++ js
atitit.系统托盘图标的实现java swing c# .net c++ js 1. 系统托盘图标的结构 1 2. Java swing的实现 1 3. .net的实现 1 4. C++的实现 1 ...
- Java Swing 图形界面开发(目录)
Java Swing 图形界面开发(目录) 2017年05月30日 23:50:42 阅读数:5228 本文链接: http://blog.csdn.net/xietansheng/article/d ...
随机推荐
- cut 从/a/b/c/d/e获取/a/b/c
https://www.cnblogs.com/chenxiaomeng/p/10066821.html two_dir=`echo /a/b/c/d/e/f | cut -d"/" ...
- JUC源码分析-集合篇:并发类容器介绍
JUC源码分析-集合篇:并发类容器介绍 同步类容器是 线程安全 的,如 Vector.HashTable 等容器的同步功能都是由 Collections.synchronizedMap 等工厂方法去创 ...
- CF#537 C. Creative Snap /// DFS
题目大意: 给定n k A B为位置长度 复仇者个数 两种花费 在一段为1~2^n的位置中 某些位置存在一些复仇者 求消灭所有复仇者的最小花费 对一段位置可以有两种处理方式 1.若该段长度至少为2 可 ...
- C#实体类克隆
public static T Clone<T>(T source) { if (!typeof(T).IsSerializable) { throw new ArgumentExcept ...
- lsm和lkm模块
使用LSM Hook框架进行内核安全审计.元数据捕获,安全人员只需要按照既定的调用规范编写LKM模块,并加载进Linux内核,而不需要对system call lookup表进行任何修改 https: ...
- vue $emit 子传父
我们使用子组件传递值给父组件使用 $emit 代码 <!DOCTYPE html> <html lang="en"> <head> <me ...
- 【POJ3155】生活的艰辛Hard Life
题面 Description ADN公司内部共 n个员工,员工之间可能曾经因为小事有了过节,总是闹矛盾.若员工u和员工 v有矛盾,用边(u, v)表示,共 m个矛盾.最近,ADN公司内部越来越不团结, ...
- windows10,nodejs安装步骤
系统: windows10 1.下载: https://nodejs.org/en/ 2.下载最新版本,根据你的系统选择32位或者64位: 3.建议选择源码源码安装,不选择编译后的安装 如: 4.进行 ...
- Thymeleaf语法总结
Thymeleaf是Spring boot推荐使用的模板引擎. 一.th属性 html有的属性,Thymeleaf基本都有,而常用的属性大概有七八个.其中th属性执行的优先级从1~8,数字越低优先级越 ...
- 泛型(Generic)接口
泛型接口例子:一个学生有一个独一无二的ID,但是每个学生的姓名不一定是唯一的. class Program { static void Main(string[] args) { Student< ...