`

Java1.6.0实现系统托盘技术

    博客分类:
  • java
阅读更多

      实现系统托盘图标,借用dll动态链接库,用JAVA JNI实现。

      JDK6.0的系统托盘的雏形是个开源的JDIC,实现原理就是不同的系统调用不同的JNI不是像LZ那样想的,可以在任何平台上跑,所以也是分支持不支持的,LZ可以用JDK1.6或JDI。

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 javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
/**
 * Java1.6.0实现系统托盘技术演示
 */
public class TrayDemo extends JFrame {
    private JPanel pane = null;
    private JButton button = null; // 启动托盘图标的按钮
    private JLabel label = null; // 用来显示系统是否支持托盘的信息
    private TrayIcon trayIcon = null; // 托盘图标
    private SystemTray tray = null; // 本操作系统托盘的实例

    public TrayDemo() {
        super("Java1.6.0托盘技术演示");
        try {
            // 将LookAndFeel设置成Windows样式
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        pane = new JPanel();
        button = new JButton("缩小到托盘");
        button.setEnabled(false);
        label = new JLabel("本操作系统不支持托盘");
        pane.add(label);
        pane.add(button);
        if(SystemTray.isSupported()){ // 如果操作系统支持托盘
            this.tray();
        }
        this.getContentPane().add(pane);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(300, 200);
        this.setVisible(true);
    }
    /**
     * 托盘相关代码
     */
    private void tray(){
        label.setText("本操作系统支持托盘");
        button.setEnabled(true);
        tray = SystemTray.getSystemTray(); // 获得本操作系统托盘的实例
        ImageIcon icon = new ImageIcon("F:/NetBeansProjects/Desktop/src/38.gif"); // 将要显示到托盘中的图标
        PopupMenu pop = new PopupMenu(); // 构造一个右键弹出式菜单
        MenuItem show = new MenuItem("显示窗口");
        MenuItem exit = new MenuItem("退出演示");
        MenuItem author = new MenuItem("Author");
        /**
         * TrayIcon有三个构造
         * TrayIcon(Image image) 用“图标”来构造
         * TrayIcon(Image image, String tooltip) 用“图标”和“ToolTip”构造
         * TrayIcon(Image image, String tooltip, PopupMenu popup) 用“图标”,“ToolTip”,“弹出菜单”来构造一个托盘图标
         */
        trayIcon = new TrayIcon(icon.getImage(), "Java1.6.0托盘技术演示", pop);
        // 点击本按钮后窗口被关闭,托盘图标被添加到系统的托盘中
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    tray.add(trayIcon); // 将托盘图标添加到系统的托盘实例中
                    setVisible(false); // 使窗口不可视
                } catch (AWTException ex) {
                    ex.printStackTrace();
                }
            }
        });
        /**
         * 添加鼠标监听器,当鼠标在托盘图标上双击时,默认显示窗口
         */
        trayIcon.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                if(e.getClickCount()==2){ // 鼠标双击
                    tray.remove(trayIcon); // 从系统的托盘实例中移除托盘图标
                    setVisible(true); // 显示窗口
                }
            }
        });
        show.addActionListener(new ActionListener() { // 点击“显示窗口”菜单后将窗口显示出来
            public void actionPerformed(ActionEvent e) {
                tray.remove(trayIcon); // 从系统的托盘实例中移除托盘图标
                setVisible(true); // 显示窗口
            }
        });
        exit.addActionListener(new ActionListener() { // 点击“退出演示”菜单后退出程序
            public void actionPerformed(ActionEvent e) {
                System.exit(0); // 退出程序
            }
        });
        author.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                showMessage();
            }
        });
        pop.add(show);
        pop.add(exit);
        pop.add(author);
    }
    /**
     * 显示信息
     */
    private void showMessage(){
        JOptionPane.showMessageDialog(this, new JLabel("<html>作者:voole" +
                "<br>Blog:http://voole.iteye.com</html>"), "voole", JOptionPane.INFORMATION_MESSAGE);
    }

    public static void main(String[] args) {
        new TrayDemo();
    }

}
分享到:
评论

相关推荐

    Java1.6.0_26

    JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的...

    Java_1.6.0API中文参考文档

    3. **I/O流**:Java 1.6.0的I/O流系统支持字符和字节流,分为输入流和输出流,包括文件流、对象流、网络流等。例如,FileInputStream和FileOutputStream用于文件操作,ObjectInputStream和ObjectOutputStream支持...

    java1[1].6.0下载

    随着Java技术的发展,Java 1.6.0已不再得到官方支持,Oracle停止了安全更新,因此继续使用可能存在安全风险。最新的Java版本提供了更多的现代特性和安全性保障,推荐开发者和企业升级到Java 8或更高版本。

    java jdk1.6.0_10.rar 绿色压缩包

    Java JDK 1.6.0_10 是Oracle公司发布的一个早期版本的Java开发工具包,主要用于Java程序的开发和运行。这个版本是绿色版,意味着它不需要安装,可以直接解压后在系统中使用,方便快捷,尤其适用于那些不希望在计算机...

    java1.6.0帮助文档(中文版)2

    java1.6.0帮助文档(中文版)(第二部分)

    Java1.6.0_29.zip

    Java JDK 1.6.0_29是一个重要的软件开发工具包,专为Java编程语言设计,用于构建和运行Java应用程序。此版本是Java Development Kit的第29个更新,针对1.6版本进行了一系列改进和增强。在本文中,我们将深入探讨这个...

    java 1.6.0 中文API文档(3)(4-3)

    java 1.6.0 中文API文档 很不错的中文文档,找了很久才找到的,强烈推荐!!

    ibm_java1.6.0

    提供了IBM Java的源代码,对于开发者来说非常重要,可以深入研究Java实现的细节,进行定制化开发或者调试。 4. **IBM Java开发工具包** - `java-1.6.0-ibm-devel-1.6.0.16.30-1jpp.i386.rpm` 包含了开发Java应用...

    jdk1.6.0_17

    **Java Development Kit (JDK) 1.6.0_17详解** JDK(Java Development Kit)是Java编程语言的核心组件,它包含了编译、调试、运行Java应用程序所需的所有工具和库。JDK 1.6.0_17是Oracle公司发布的一个较早的版本,...

    jdk1.6.0_31绿色免安装版

    JAVA_HOME=D:\Program Files\Java\jdk1.6.0_31 CLASSPATH=.;D:\Program Files\Java\jdk1.6.0_31\lib\tools.jar;D:\Program Files\Java\jdk1.6.0_31\lib\dt.jar;D:\Program Files\Java\jdk1.6.0_31\bin; path=D:\...

    lz4-java-1.6.0-API文档-中文版.zip

    赠送jar包:lz4-java-1.6.0.jar; 赠送原API文档:lz4-java-1.6.0-javadoc.jar; 赠送源代码:lz4-java-1.6.0-sources.jar; 赠送Maven依赖信息文件:lz4-java-1.6.0.pom; 包含翻译后的API文档:lz4-java-1.6.0-...

    jdk1.6.0_20.rar

    JDK 1.6.0_20 是Oracle公司发布的一个较早版本,包含了Java运行时环境(JRE)以及一系列开发工具,如Java编译器(javac)、Java文档生成器(javadoc)和Java调试器(jdb)等。 该版本的JDK是基于Java SE(标准版)...

    Java SE 1.6.0_15 SDK文档(javadoc版本)

    Java SE 1.6.0_15 SDK文档包含了Java Standard Edition 6的第15次更新的完整技术文档,这个版本是Oracle公司为开发者提供的关键性开发工具集。Java SE是Java平台的核心,用于构建和运行桌面应用程序、服务器端应用...

    java JDK1.6.0源码 源代码

    Java JDK 1.6.0源码是Java开发者的重要参考资料,它揭示了JDK的核心类库是如何实现的,包括各种核心API和基础组件。对于深入理解Java语言、优化代码以及学习设计模式都有着不可估量的价值。 1. **Java类库**: - `...

    jdk1.6.0_25

    JDK 1.6.0_25属于Java SE(标准版)平台,它是Java 6系列的一个更新版本。在Java 6中,有多个更新版本,每个更新都包含了错误修复、安全更新以及性能优化。这个版本可能包括了对早期版本中已知问题的修复,以提高...

    java1.6.0帮助文档(中文版)

    这是java1.6.0的中文帮助文档,很好。该文档共分成4个部分,请全部下载后解压。

    jre1.6.0绿色版

    "jre1.6.0绿色版"指的是一个无需通过传统安装过程即可使用的Java运行环境版本。这种绿色版通常是为了方便用户快速启动Java程序而设计的,它不涉及系统注册表修改,易于携带和部署,尤其适用于那些不希望在计算机上...

    jdk1.6.0安装包

    JDK 1.6.0,也被称为Java SE 6,是一个较早的版本,尽管现在已被更现代的版本如Java 8和11取代,但对于学习基础或兼容旧项目仍具有价值。下面我们将详细讨论JDK 1.6.0的安装过程、主要组件及其在Java开发中的重要性...

    jdk1.6.0_45免安装64位

    - **Java解释器(java)**:负责运行Java字节码,实现Java的“一次编写,到处运行”特性。 - **Java运行时环境(JRE)**:包括Java虚拟机(JVM)、基础类库和其他运行Java程序所需的组件。 - **开发工具**:如`jar`...

    Java1.6.0环境变量的配置[整理].pdf

    Java 1.6.0 环境变量的配置是每个Java开发者必须掌握的基本技能,因为这直接影响到Java开发工具的正常使用。环境变量配置的主要目的是让操作系统能够在任何位置找到Java Development Kit (JDK) 安装目录下的可执行...

Global site tag (gtag.js) - Google Analytics