直接上方法,

不过有些问题要注意,最后会说明!

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 托盘的更多相关文章

  1. Java Swing 托盘闪烁Demo实例

    桌面程序当中,托盘显示是一个常用的功能. C#的WinForm程序要实现托盘是挺轻松的,而Java Swing要实现这个功能虽然也不难, 但是由于Java Swing开发者或许没有C#多,所以看到很多 ...

  2. Swing实现系统托盘

    /* 实现系统托盘化 */ protected void setToolSystemTray() { // 系统是否支持系统托盘 if (SystemTray.isSupported()) { // ...

  3. 用swing也可以做出好看的界面

    用Swing做出的例子:JavaFX做出的界面:后来又做出了自己编写的一套基于Synth的L&F,其与直接在代码中重绘某个组件不同,最大优点是具有可插拔性,即在不改变原有程序代码的情况下,用户 ...

  4. Swing 窗口的最小化到系统图标与还原

    2014年2月26日 13:01:47 一个上午的功夫,终于折腾好了. 上午主要是卡在监听事件的参数问题.当时脑子不好使,忘记事件是自己构造的,傻傻的测试了半天,如何传递窗口的参数 等中午解决的时候, ...

  5. Java应用程序使用系统托盘资源

    要想使自己开发的Java SE项目运行在自己的电脑系统托盘上,这并不是什么难事,总共需要如下几步即可: 1.线判断一下,系统托盘是否可用,否则接下来的程序将不可避免的报出异常咯 2.获得一个Syste ...

  6. java 菜单 中文 乱码问题解决方案(使用idea/eclipse) swing MenuItem乱码

    java swing MenuItem乱码 2016年12月30日 13:32:08751人阅读 评论(0) 收藏 举报   用java开发一个带有托盘图标的程序, 其它模块的中文显示都是正常的,比如 ...

  7. Atitit. 悬浮窗口的实现 java swing c# .net c++ js html 的实现

    Atitit. 悬浮窗口的实现 java swing c# .net c++ js html 的实现 1. 建立悬浮窗口引用代码 1 1.1. 定义悬浮窗口,设置this主窗口引用,是为了在悬浮窗口中 ...

  8. 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 ...

  9. Java Swing 图形界面开发(目录)

    Java Swing 图形界面开发(目录) 2017年05月30日 23:50:42 阅读数:5228 本文链接: http://blog.csdn.net/xietansheng/article/d ...

随机推荐

  1. Codeforces 1169A Circle Metro

    题目链接:codeforces.com/contest/1169/problem/A 题意:有俩个地铁,一个从 1 → 2 → …→ n → 1→ 2 →…, 一个 从 n → n-1 →…→ 1 → ...

  2. 前端(七)—— 盒模型之display、overflow、隐藏、border、margin、样式支持,层级结构

    display.overflow.隐藏.border.margin.样式支持,层级结构 一.盒模型之display 1.三种样式 block 块 inline 内联/行内 inline-block 内 ...

  3. centos7简单安装配置mariadb

    CentOS 7下yum安装MariaDB yum install mariadb mariadb-server systemctl start mariadb #启动mariadb systemct ...

  4. Spark中的多线程并发处理

    Spark中的多任务处理 Spark的一个非常常见的用例是并行运行许多作业. 构建作业DAG后,Spark将这些任务分配到多个Executor上并行处理.但这并不能帮助我们在同一个Spark应用程序中 ...

  5. Django-ORM初识

    Django之ORM基础 一.ORM简介: ORM概念: 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术 ...

  6. VACUUM - 垃圾收集以及可选地分析一个数据库

    SYNOPSIS VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table ] VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANA ...

  7. 笔记54 Mybatis快速入门(五)

    Mybatis中注解的使用 1.XML方式的CRUD 新增加接口CategoryMapper ,并在接口中声明的方法上,加上注解对比配置文件Category.xml,其实就是把SQL语句从XML挪到了 ...

  8. vue for 循环例子 2

    demo <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf- ...

  9. CSIC_716_20191206【并发编程理论基础】

    进程:正在执行的一个过程,进程是对正在执行过程的一个抽象.区别于程序, 进程的三种状态:  进程是动态的. 就绪态ready:   进程具备运行状态,等待操作系统分配处理器 运行状态running:进 ...

  10. laydate日期插件弹出闪退和多次闪退问题解决

    情况:点击第一个input 日期,可以正常选择日期,之后点击任何一个,都会闪一下然后消失,无法正常选择: 原因:lay-key的值的问题,需要循环重新为lay-key赋值 解决: <input ...