`

SystemTray(转帖)

    博客分类:
  • java
阅读更多

        SystemTray意为桌面的系统托盘,在Windows下表现为任务状态栏的一个图标,在很多的应用中都有体现,如及时通讯软件(MSN、QQ),监控类软件(杀毒软件)等。 
在 Java 6的java.awt包下提供了SystemTray和TrayIcon类,这两个类可以实现系统托盘功能,下面让我们看看如何去实现系统托盘。实现的流 程:捕获关闭窗口事件、隐藏窗口、显示托盘图标,鼠标右击托盘图标、显示弹出菜单(自动)、选择菜单的显示窗口项,再显示窗口、隐藏托盘图标。

先 了解一下SystemTray和TrayIcon这两个类。每一个Java应用都会包含一个SystemTray实例,这个不需要你去实例化,你可以通过 SystemTray.getSystemTray()获取,但是不是所有的系统和平台支持系统托盘的,因此我们必须先判断系统是否支持系统托盘,检测是 否支持托盘的方法是 isSupported() 。

接下来我们就要在SystemTray中添加TrayIcon,这样在托盘区就会显示一个新的托盘图标。TrayIcon有四部分组成:名称、图标、弹出菜单和事件,所以我们将这四方面做好就可以完成其既定的功能。



下面是例子程序:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Frame;

/**
 *
 * @author max
 */
import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class TrayIconAdvanced extends JFrame {
    private TrayIcon ti;
    public static void main(String[] args) {
        TrayIconAdvanced frame = new TrayIconAdvanced();
        frame.setTitle("TrayIconAdvanced");
        frame.setVisible(true);
        frame.setSize(200, 65);
        frame.setLocation(300, 200);
    }

    public TrayIconAdvanced() {
        setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
            if (SystemTray.isSupported()) {
                setVisible(false);//隐藏窗口
                minimizeToTray();//如果系统支持托盘图标,将窗口放入系统托盘区
            } else {
                System.exit(0);//否则结束程序
                }
            }
        });

        JPanel root = new JPanel();
        JButton exitButton = new JButton("Exit");
        exitButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);//结束程序
            }
        });
        root.add(exitButton);
        getContentPane().add(root);
        pack();
        initTi();
    }
    private void initTi() {
        Image image = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("TrayIcon.gif"));
        PopupMenu popupTi = new PopupMenu();//弹出菜单
        MenuItem showItem = new MenuItem("Show");//菜单项
        ActionListener showListener = new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                setVisible(true);//重新显示窗口
                SystemTray.getSystemTray().remove(ti);//从系统托盘中移出
            }
        };
        showItem.addActionListener(showListener);//菜单行听众
        popupTi.add(showItem);
        ti = new TrayIcon(image, "TrayIcon", popupTi);//图标,标题,右键弹出菜单
        ti.addActionListener(showListener);//增加一个双击事件听众

    }

    public void minimizeToTray() {
        SystemTray tray = SystemTray.getSystemTray();
        try {
            tray.add(ti);//在系统托盘区中增加图标
        } catch (AWTException e) {
            System.err.println(e);
        }
    }
}

 (2)

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Frame;

/**
 *
 * @author max
 */
import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//import java.net.URL;
//import java.net.URLClassLoader;

import javax.swing.JFrame;
import javax.swing.JLabel;
public class TestSystemTray
{
    public static void main(String args[])
    {
        TrayIcon trayIcon = null;
        if (SystemTray.isSupported()) //判断系统是否支持系统托盘
        {
            SystemTray tray = SystemTray.getSystemTray(); //获取系统托盘
            Image image = Toolkit.getDefaultToolkit().getImage("TrayIcon.gif");//载入图片
            ActionListener listener = new ActionListener() {
                public void actionPerformed(ActionEvent e) {

                    //创建一个窗体
                    JFrame frame = new JFrame();
                    frame.setBounds(400,400,200,200);
                    JLabel label =new JLabel("welcome JDK1.6");
                    frame.add(label);
                    frame.setVisible(true);

                }
            };

        //创建托盘图标的右键弹出菜单,open与exit.
        PopupMenu popup = new PopupMenu();
        MenuItem defaultItem = new MenuItem("open");
        defaultItem.addActionListener(listener);
        MenuItem exitItem = new MenuItem("exit");
        exitItem.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e) {
                System.exit(0);

            }
        });
        popup.add(defaultItem);
        popup.add(exitItem);
        trayIcon = new TrayIcon(image, "My System Tray ", popup);//创建托盘图标

        trayIcon.addActionListener(listener);//双击托盘图标时打开窗体

        try {
            tray.add(trayIcon);//将图标加入到系统托盘区
        } catch (AWTException e1) {
            e1.printStackTrace();
        }
        }
    }
}
 
分享到:
评论

相关推荐

    SystemTray

    标题“SystemTray”指的是Java开发工具包(JDK)1.6版本引入的一个新特性,主要用于在操作系统任务栏或通知区域实现图标显示和交互。`SystemTray`是Java AWT(Abstract Window Toolkit)库中的一个类,它提供了一个...

    JavaFX+Jfoenix 学习笔记(十)--系统托盘及解决中文乱码问题源码

    SystemTray tray = SystemTray.getSystemTray(); ``` 3. 创建`TrayIcon`,这将作为显示在托盘中的图标: ```java TrayIcon trayIcon = new TrayIcon(image, "应用名称"); trayIcon.setImageAutoSize(true); `...

    SystemTray单实例

    系统托盘下的程序的单个程序的运行,不会运行两个程序

    java实现系统托盘

    SystemTray tray = SystemTray.getSystemTray(); ``` 4. **创建图标**: 创建一个`ImageIcon`对象,使用你想要显示的图像,并用它来创建`TrayIcon`对象。 ```java Image image = Toolkit.getDefaultToolkit()....

    SystemTray:Java 8+上对SwingAWT,GtkStatusIcon和AppIndicator的跨平台SystemTray支持

    专业的跨平台SystemTray支持Java 6+上的Swing / AWT , GtkStatusIcon和AppIndicator 。 该库提供了OS Native菜单和Swing / AWT菜单,具体取决于OS和桌面环境以及是否启用了AutoDetect(默认设置)。 Linux / ...

    CSYSTEMTRAY类声明与实现

    接下来是`SYSTEMTRAY.CPP`和`SYSTEMTRAY.H`文件的内容。`.CPP`文件实现了类的方法,而`.H`文件则包含了类的声明。`SYSTEMTRAY.CPP`可能包含以下内容: 1. 类的实现细节,包括上述的构造函数、析构函数和其他公开...

    系统托盘程序(c++)

    本项目包含两个主要部分:`systemtray_src` 和 `systemtraySDK_demo`。`systemtray_src` 提供了一个封装的托盘类,它包含了创建和管理系统托盘图标所需的核心功能。这个类可能包含了创建、更新、删除托盘图标的方法...

    Java最小化到托盘的方法

    SystemTray systemTray = SystemTray.getSystemTray(); systemTray.add(trayIcon); ``` #### 四、处理窗口事件 为了使应用程序能够响应用户的操作,比如双击托盘图标时恢复主窗口,我们需要为窗口添加事件监听器。...

    ScreenSaver Manager-在WTL中使用SystemTray类的示例

    《在WTL中使用SystemTray类管理屏幕保护程序》 Windows Template Library (WTL) 是微软提供的一套轻量级的C++库,用于构建Windows应用程序,它为开发人员提供了对Windows API的直接访问。在WTL中,SystemTray类是一...

    sys_tray.zip_任务栏

    `SystemTray.cpp`和`SystemTray.h`的结合可以作为学习和实践的起点,通过阅读和理解这些代码,可以掌握创建系统托盘图标的基本步骤。 总的来说,这个压缩包提供了一个了解和实践Windows系统托盘编程的资源集合,...

    实例20 在任务栏活动区显示图标

    SystemTray对象是PowerBuilder提供的一种特殊对象,它可以将应用程序的图标放置在Windows任务栏的右下角通知区域,也就是通常所说的“托盘区”。 步骤如下: 1. **创建SystemTray对象**:在PowerBuilder的工作空间...

    C#实现的SystemTest项目源代码

    注意事项: 连接MySQL数据库,在数据库内建一个名为System的数据库,再建一张表(名为“登录用户”),字段包括name和password 即可以登录。 例如: name:admin password:1234

    java实现最小化到托盘

    1. **理解SystemTray**: `SystemTray`是Java提供的一个接口,它允许应用程序在系统托盘区放置图标并处理用户的点击事件。但需要注意的是,这个功能不是所有操作系统都支持,例如,Windows XP不支持,而Windows 7及...

    vc托盘万能通用类(源码)

    `SystemTray.cpp`包含了类的实现细节,而`SystemTray.h`则定义了类的接口,通常包括类的声明以及公有成员函数的定义。 `SystemTray`类可能会包含以下功能: 1. **初始化**:初始化托盘图标,包括设置图标、提示信息...

    Windows系统托盘图标实践(AWT)

    在Java编程语言中,AWT(Abstract ...因此,进行跨平台开发时,你可能需要使用Java Swing的`SystemTray`替代品,如`javax.swing.SystemTray`,或者使用第三方库,如JNA(Java Native Access)来实现更广泛的兼容性。

    JDK_API_16

    这里我们将深入探讨两个关键的新特性:`Desktop`类和`SystemTray`类。 `Desktop`类是Java AWT(Abstract Window Toolkit)库中的一个新成员,它为Java应用程序提供了一种与操作系统桌面环境交互的能力。这个类允许...

    JAVA6.0的新特性

    其中,最显著的两个新特性当属`Desktop`类和`SystemTray`类的加入,它们使得Java应用能够更加无缝地集成到桌面环境中,提供了与操作系统更深层次的交互能力。 ### `Desktop`类 `Desktop`类是JDK 6中新增的一个类,...

    javaQQ实现托盘的小例子

    本文将详细解析如何在Java中利用`java.awt.SystemTray`类实现托盘功能,并通过一个具体示例——JavaQQ实现托盘功能的过程来深入理解其工作原理。 #### 核心知识点:Java SystemTray API `java.awt.SystemTray`是...

    系统托盘完整例子,功能完整

    系统托盘,也被称为通知区域或任务栏图标,是Windows操作系统中一个重要的功能,它允许应用程序在主界面被最小化或者隐藏时,仍然在后台运行并提供必要的交互。本示例是一个功能完整的系统托盘应用,它展示了如何...

    java程序实现系统托盘功能

    在Java中,`SystemTray`是单例的,所以我们需要通过`SystemTray.getSystemTray()`来获取唯一的实例。如果当前系统不支持托盘功能(例如,旧版本的Mac OS),这个方法会抛出`java.awt.AWTError`异常。 2. **创建...

Global site tag (gtag.js) - Google Analytics