JAVA添加托盘图标和托盘弹出式菜单

简介:

很多程序在运行的过程中会在系统的托盘区域添加托盘图标,方便用户快捷操作,如QQ等,在JDK1.6及其以后的版本中,JAVA也提供了对系统托盘图标的支持。
我们以系统上的网络连接托盘图标为例,首先,我们也准备一张托盘图标,建议分辨率:16*16,支持jpg、gif、png等格式,不支持ico格式的,这是需要注意的。
这里写图片描述

import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

public class SystemTrayDemo
{
   public static void main(String[] args)
   {
      // 判断是否支持系统托盘
      if (SystemTray.isSupported())
      {
         // 获取图片所在的URL
         URL url = SystemTrayDemo.class.getResource("networking.png");
         // 实例化图像对象
         ImageIcon icon = new ImageIcon(url);
         // 获得Image对象
         Image image = icon.getImage();
         // 创建托盘图标
         TrayIcon trayIcon = new TrayIcon(image);
         // 为托盘添加鼠标适配器
         trayIcon.addMouseListener(new MouseAdapter()
         {
            // 鼠标事件
            public void mouseClicked(MouseEvent e)
            {
               // 判断是否双击了鼠标
               if (e.getClickCount() == 2)
               {
                  JOptionPane.showMessageDialog(null, "SystemTrayDemo");
               }
            }
         });
         // 添加工具提示文本
         trayIcon.setToolTip("本地连接\r\n速度:100.0 Mbps\r\n状态:已连接上");
         // 创建弹出菜单
         PopupMenu popupMenu = new PopupMenu();
         popupMenu.add(new MenuItem("禁用(D)"));
         popupMenu.add(new MenuItem("状态(S)"));
         popupMenu.add(new MenuItem("修复(P)"));
         popupMenu.addSeparator();
         popupMenu.add(new MenuItem("更改 Windows 防火墙设置(C)"));
         popupMenu.addSeparator();
         popupMenu.add(new MenuItem("打开网络连接(O)"));

         // 为托盘图标加弹出菜弹
         trayIcon.setPopupMenu(popupMenu);
         // 获得系统托盘对象
         SystemTray systemTray = SystemTray.getSystemTray();
         try
         {
            // 为系统托盘加托盘图标
            systemTray.add(trayIcon);
         }
         catch (Exception e)
         {
            e.printStackTrace();
         }
      }
      else
      {
         JOptionPane.showMessageDialog(null, "not support");
      }
   }
}

运行结果:

这里写图片描述

这里写图片描述

目录
相关文章
|
Java
Java应用程序使用系统托盘资源
要想使自己开发的Java SE项目运行在自己的电脑系统托盘上,这并不是什么难事,总共需要如下几步即可: 1、线判断一下,系统托盘是否可用,否则接下来的程序将不可避免的报出异常咯 2、获得一个SystemTray,注意我们是通过getSystemTray方法来获取,而不是直接创建一个系统托盘。
1049 0
|
3天前
|
存储 缓存 安全
【Java面试题汇总】多线程、JUC、锁篇(2023版)
线程和进程的区别、CAS的ABA问题、AQS、哪些地方使用了CAS、怎么保证线程安全、线程同步方式、synchronized的用法及原理、Lock、volatile、线程的六个状态、ThreadLocal、线程通信方式、创建方式、两种创建线程池的方法、线程池设置合适的线程数、线程安全的集合?ConcurrentHashMap、JUC
【Java面试题汇总】多线程、JUC、锁篇(2023版)
|
14天前
|
监控 Java 调度
【Java学习】多线程&JUC万字超详解
本文详细介绍了多线程的概念和三种实现方式,还有一些常见的成员方法,CPU的调动方式,多线程的生命周期,还有线程安全问题,锁和死锁的概念,以及等待唤醒机制,阻塞队列,多线程的六种状态,线程池等
75 6
【Java学习】多线程&JUC万字超详解
|
7天前
|
Java 调度 开发者
Java并发编程:深入理解线程池
在Java的世界中,线程池是提升应用性能、实现高效并发处理的关键工具。本文将深入浅出地介绍线程池的核心概念、工作原理以及如何在实际应用中有效利用线程池来优化资源管理和任务调度。通过本文的学习,读者能够掌握线程池的基本使用技巧,并理解其背后的设计哲学。
|
7天前
|
缓存 监控 Java
Java中的并发编程:理解并应用线程池
在Java的并发编程中,线程池是提高应用程序性能的关键工具。本文将深入探讨如何有效利用线程池来管理资源、提升效率和简化代码结构。我们将从基础概念出发,逐步介绍线程池的配置、使用场景以及最佳实践,帮助开发者更好地掌握并发编程的核心技巧。
|
3天前
|
Java 调度 开发者
Java中的多线程基础及其应用
【9月更文挑战第13天】本文将深入探讨Java中的多线程概念,从基本理论到实际应用,带你一步步了解如何有效使用多线程来提升程序的性能。我们将通过实际代码示例,展示如何在Java中创建和管理线程,以及如何利用线程池优化资源管理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧,帮助你更好地理解和应用多线程编程。
|
8天前
|
缓存 监控 Java
java中线程池的使用
java中线程池的使用
|
8天前
|
算法 Java 数据处理
Java并发编程:解锁多线程的力量
在Java的世界里,掌握并发编程是提升应用性能和响应能力的关键。本文将深入浅出地探讨如何利用Java的多线程特性来优化程序执行效率,从基础的线程创建到高级的并发工具类使用,带领读者一步步解锁Java并发编程的奥秘。你将学习到如何避免常见的并发陷阱,并实际应用这些知识来解决现实世界的问题。让我们一起开启高效编码的旅程吧!
|
13天前
|
存储 Java 程序员
优化Java多线程应用:是创建Thread对象直接调用start()方法?还是用个变量调用?
这篇文章探讨了Java中两种创建和启动线程的方法,并分析了它们的区别。作者建议直接调用 `Thread` 对象的 `start()` 方法,而非保持强引用,以避免内存泄漏、简化线程生命周期管理,并减少不必要的线程控制。文章详细解释了这种方法在使用 `ThreadLocal` 时的优势,并提供了代码示例。作者洛小豆,文章来源于稀土掘金。
|
10天前
|
Java 开发者
Java中的多线程编程基础与实战
【9月更文挑战第6天】本文将通过深入浅出的方式,带领读者了解并掌握Java中的多线程编程。我们将从基础概念出发,逐步深入到代码实践,最后探讨多线程在实际应用中的优势和注意事项。无论你是初学者还是有一定经验的开发者,这篇文章都能让你对Java多线程有更全面的认识。
15 1