`

java创建系统托盘实现(swt和jdk6分别实现)

    博客分类:
  • J2SE
阅读更多
由于jdk6之前并不支持
所以使用swt
jdk6可以支持了 建议使用jdk6的版本 因为它才是真正的跨平台
swt
import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.*;

public class TrayBySwt {

	public static void main(String[] args) {
		Display display = new Display();
		final Shell shell = new Shell(display);
		shell.setText("系统托盘BySwt");
		shell.setLayout (new FillLayout());
		Button button = new Button(shell, SWT.PUSH);
		button.setText("隐藏窗口显示托盘图标");
		
		ImageData imageData = new ImageData("E:\\workspace\\myeclipse66\\ra\\Tray\\src\\16.gif");
		Image image = new Image(display, imageData);
		//取得系统托盘
		final Tray tray = display.getSystemTray();
		if (tray == null) {
			System.out.println("当前操作系统不支持托盘图标");
		} else {
			final TrayItem item = new TrayItem(tray, SWT.NONE);
			
			item.setToolTipText("我是托盘图标");
			item.addListener (SWT.Show, new Listener () {
			public void handleEvent (Event event) {
				System.out.println("show");
			}
			});
			item.addListener (SWT.Hide, new Listener () {
				public void handleEvent (Event event) {
					System.out.println("hide");
				}
			});
			item.addListener (SWT.Selection, new Listener () {
				public void handleEvent (Event event) {
					System.out.println("selection");
				}
			});
		
			final Menu menu = new Menu (shell, SWT.POP_UP);
			for (int i = 0; i < 8; i++) {
				MenuItem mi = new MenuItem (menu, SWT.PUSH);
				mi.setText ("Item" + i);
				mi.addListener (SWT.Selection, new Listener () {
					public void handleEvent (Event event) {
						System.out.println("selection " + event.widget);
					}
				});
				if (i == 0) menu.setDefaultItem(mi);
			}
			item.addListener (SWT.MenuDetect, new Listener () {
				public void handleEvent (Event event) {
					menu.setVisible (true);
				}
			});

			item.addListener(SWT.DefaultSelection, new Listener() {
				public void handleEvent(Event event) {
					shell.setVisible(true);
					item.setVisible(false);
				}
			});
			item.setImage(image);
			button.addListener(SWT.Selection, new Listener(){
				public void handleEvent(Event event) {
					shell.setVisible(false);
					item.setVisible(true);
				}
			});
			item.setVisible(false);
		}
		
		shell.setBounds(50, 50, 300, 200);
		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		image.dispose();
		display.dispose();
	}
}



jdk6

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;

/**
 *
 * @author Mr.LiuTao
 */
public class TrayByJdk extends JFrame {

    private JPanel pane = null;
    private JButton button = null; // 启动托盘图标的按钮
    private JLabel label = null; // 用来显示系统是否支持托盘的信息
    private TrayIcon trayIcon = null; // 托盘图标
    private SystemTray tray = null; // 本操作系统托盘的实例
    //采用jdk1.6的托盘技术 实现跨平台的应用
    public TrayByJdk() {
        super("托盘技术演示");
        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("tray.gif"); // 将要显示到托盘中的图标
        ImageIcon icon = new ImageIcon("E:\\workspace\\myeclipse66\\ra\\Tray\\src\\16.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(), "托盘技术演示", 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("这是一个系统托盘"), "消息", JOptionPane.INFORMATION_MESSAGE);
    }

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

分享到:
评论

相关推荐

    java实现系统托盘

    在实现系统托盘功能时,开发者需要编写本地方法来创建和管理托盘图标,并通过JNI将这些方法暴露给Java代码。这通常涉及以下步骤: 1. 创建一个本地方法声明在Java类中,例如`native void createTrayIcon();` 2. ...

    java系统托盘 java 系统托盘 系统托盘 java 系统托盘java java任务栏 java 任务栏 任务栏java 任务栏 java 源代码

    总结来说,Java的系统托盘功能使得开发者可以创建更加友好且易于访问的应用程序,通过`TrayIcon`类提供的API,能够轻松实现图标显示、用户交互以及弹出菜单等功能,从而提升应用的易用性和可维护性。

    JAVA实现系统托盘

    从Java SE 6(即JDK 1.6)开始,官方提供了内置的支持来创建系统托盘图标,这主要通过`java.awt.SystemTray`类实现。`SystemTray`类是用于创建托盘图标的入口类,它提供了一些静态方法来检查当前平台是否支持托盘...

    java的jdk6安装包

    2. 动态代理:JDK6引入了`java.lang.reflect.Proxy`类,允许动态创建代理对象,实现接口方法的调用。 3. 注解(Annotation):增强了代码的元数据功能,可以用于编译时检查、运行时处理等。 4. 自动装箱与拆箱:简化...

    java jdk6 32位

    - **Nashorn JavaScript引擎**:虽然在JDK 6中未完全实现,但JDK 7开始引入了Nashorn JavaScript引擎,为Java与JavaScript的交互提供了更高效的方式。 - **改进的Swing和JavaFX**:UI组件得到了增强,包括更好的...

    java-jdk1.6-jdk-6u45-windows-x64.zip

    3. 安装完成后,确保在系统的环境变量配置中包含了JDK的bin目录,这样可以在任何地方运行Java命令,如`javac`(Java编译器)和`java`(Java解释器)。 4. 为了验证JDK是否正确安装,可以打开命令行窗口并输入`java -...

    Java8 jdk安装包

    6. **默认方法**:在接口中添加默认方法,允许不破坏旧的实现,同时为接口添加新的功能。这在增加API时非常有用。 7. ** Nashorn JavaScript引擎**:Java8集成了Nashorn JavaScript引擎,允许Java代码与JavaScript...

    jdk6免安装下载 免费下载

    Java Development Kit (JDK) 是Java编程语言的核心组件,它包含了一组开发工具,用于创建、编译、调试和运行Java应用程序。JDK6,也称为JDK 1.6,是Oracle公司发布的一个重要版本,它在2006年推出,提供了许多新特性...

    jdk6免安装版本, 解压直接使用

    `JAVA_HOME`应指向JDK6的安装目录,而`PATH`则需要包含`JAVA_HOME/bin`,这样系统才能在任何地方执行Java命令,如`javac`(Java编译器)和`java`(Java虚拟机)。 JDK6的主要特性包括: 1. **增强的泛型**:引入了...

    java系统托盘,简单的一个测试

    java系统托盘,在jdk1.6里面测试过

    java jdk6

    java jdk6 java jdk6 java jdk6 java jdk6 java jdk6 java jdk6 java jdk6

    Java JDK API 1.6 官方版下载

    JDK是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步。而专门运行在x86平台的Jrocket在服务端运行效率也要比SunJDK好很多。从SUN的JDK5.0开始提供了泛型等非常实用的功能,...

    mac jdk6 java6支持最新macOs10.13.4版本及以下

    mac jdk6 java6支持最新macOs10.13.4版本及以下,亲测有效

    Java JDK6(中文版)

    6. **NIO.2(New IO)**:JDK6引入了NIO的扩展,提供了更丰富的文件系统操作API,包括文件通道、文件属性和异步I/O等。 7. **脚本引擎支持**:JDK6开始支持JavaScript和其他脚本语言,如Rhino引擎,使得Java平台...

    Oracle Java JDK 17

    6. **Java打包工具(jar)**:用于创建和管理Java档案(JAR)文件,便于代码打包和分发。 7. **调试工具(jdb)**:帮助开发者调试Java应用程序。 8. **性能分析工具**:如JVisualVM和JConsole,用于监控和分析Java...

    java学习笔记JDK6

    Java JDK 6学习笔记是Java开发者入门和进阶的重要参考资料,由知名作者林信良编著。本笔记主要涵盖了JDK 6版本的核心特性和关键概念,为读者提供了全面而深入的学习路径。以下是对其中重要知识点的详细阐述: 1. **...

    jdk_api_1.8-JAVA中文版API手册

    JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。 jdk1.8新特性 1)Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可。 2)新增lambda表达式 3)提供...

    JavaJDK6学习笔记(林信良著)

    《Java JDK6学习笔记》是由林信良编著的一本针对Java初学者和进阶者的学习资料,书中详细讲解了Java编程语言与JDK6版本的相关知识。这本笔记不仅包含传统的Java学习内容,还结合了作者独特的见解和实践经验,为读者...

    java-jdk1.8-jdk-8u181-linux-x64.zip

    Java JDK 1.8是Java开发工具包的一个重要版本,主要针对Linux x64平台进行了优化。这个压缩包文件“java-jdk1.8-jdk-8u181-...同时,了解如何在不同的操作系统环境下安装和配置JDK也是每个Java开发者的基础技能之一。

Global site tag (gtag.js) - Google Analytics