- 浏览: 558031 次
- 性别:
- 来自: 安徽
文章分类
最新评论
-
baynjh:
jp.ne.so_net.ga2.no_ji.jcom.JCo ...
java应用jcom将word转pdf -
zgw06629:
你好,请问你都做了哪些修改呢?是在客户端还是服务端?
http上传文件深度解析-高性能http传输 -
eidolon:
翻译有误。 l ?:意思是操作符左边的符号( ...
BNF 和EBNF的含义与用法(感谢译者:Sunnybill) -
huoyj:
请教一个问题,是不是HTTP请求里面没有包含上传文件在客户端的 ...
http上传文件深度解析-高性能http传输 -
a49688448:
“认清” 我还以为google怎么你了
最近终于认清了google
Java的SystemTray类的使用方法
JDK1.6版增加了java.awt.SystemTray类,该类表示桌面的系统托盘,这对大多数系统托盘应用已经足够。如果这个类还是不能满足您的需求,可以试一试JDIC (JDesktop Integration Components)。
JDK1.6的API文档,给出了这个类的用法。有人愿意把创建系统托盘的代码直接放在主应用代码中,笔者更倾向于把创建系统托盘的责任分派给一个单独的类,这符合类的设计原则。在主应用中直接调用该类的工厂方法就可以了,结构清晰,便于维护,改动或增加系统托盘的功能,不必改动主应用代码。
创建系统托盘的类(TrayFactory.java)的代码如下:
这个类的构造方法是private的,因为创建该类的实例不是我们的目的,另一方面是为了方便系统托盘的创建。
构造方法有3个参数:
第1个参数是一个Component,这就是您所要显示或隐藏的主窗体。当然,您把这个参数写成Component的子类也无妨,这里是为了增加类的通用性。
第2个参数是一个String,它是一个image文件的名称,将来用这个文件创建托盘图标TrayIcon。
第3个参数也是一个String,它是工具提示字符串,当您把鼠标放到托盘图标上的时候,托盘图标将弹出这个字符串的内容。
创建系统托盘的具体代码在方法private void init()中。
创建系统托盘的任务分为两个步骤:
首先创建托盘图标(TrayIcon),其次把托盘图标添加到系统托盘(SystemTray)中。
Java.awt.TrayIcon提供3种构造方法创建TrayIcon实例,这里采用第三种构造方法:
trayIcon = new TrayIcon(image, tooltip, popupMenu);
其中,image对象由TrayFactory类构造方法的第二个参数trayImageName创建:
Image image = Toolkit.getDefaultToolkit().getImage(trayImageName);
tooltip就是TrayFactory类构造方法的第三个参数
由于不能朝前引用,PopupMenu对象popupMenu必须在创建trayIcon对象之前创建,并给popup菜单项添加动作监听器来处理菜单项的动作(点击)事件,由于处理动作事件比较简单,这里不做具体分析,只对TrayIcon的鼠标事件做出说明。
我们希望在托盘图标上按下鼠标左键时显示主窗体,所以必须处理托盘图标的鼠标按下事件。我们用TrayIconMouseListener私有内部类(private inner class)来处理鼠标按下事件。不论按下鼠标左键还是右键,都会产生鼠标事件,都会引起mousePressed方法的调用,所以在这个方法中只处理左键而忽略右键,把右键留给popup菜单:
if (me.getButton() == MouseEvent.BUTTON1) {
comp.setVisible(true);
}
这时,就可以给init()方法中创建的TrayIcon对象trayIcon添加鼠标监听器了:
trayIcon.addMouseListener(new TrayIconMouseListener());
利用TrayFactory类对主应用创建系统托盘时,只需在主应用中调用该类的工厂方法即可:
TrayFactory.createTray(comp, trayImageName, tooltip);
注意这一句,一定要放在适当的位置:主应用从开始启动到启动完毕,必须有机会执行这一句。所以建议把这一句放在主应用的构造方法中,或者干脆放在显示主窗体的前一个语句的位置:
//其他语句
JFrame mainFrame = new JFrame("测试主窗体");
mainFrame.getContentPane().add(otherVisibleObj, BorderLayout.CENTER);
mainFrame.pack();
TrayFactory.createTray(mainFrame, "images/icon.png", "这是工具提示");
mainFrame.setVisible(true);
下面给出一个完整的例子。
主应用(MainApp.java)源代码如下:
为简单起见,可以把TrayFactory.java和MainApp.java放在同一目录下,把icon.png文件放在当前目录的images目录下。
JDK1.6的API文档,给出了这个类的用法。有人愿意把创建系统托盘的代码直接放在主应用代码中,笔者更倾向于把创建系统托盘的责任分派给一个单独的类,这符合类的设计原则。在主应用中直接调用该类的工厂方法就可以了,结构清晰,便于维护,改动或增加系统托盘的功能,不必改动主应用代码。
创建系统托盘的类(TrayFactory.java)的代码如下:
CODE:
//package com.jnmc.liang.systemtray;
import java.awt.*;
import java.awt.event.*;
public class TrayFactory {
private TrayIcon trayIcon = null;
private Component comp = null;
private String trayImageName = null;
private String tooltip = null;
private TrayFactory(Component comp, String trayImageName, String tooltip) {
this.comp = comp;
this.trayImageName = trayImageName;
this.tooltip = tooltip;
init();
}
private void init() {
if (SystemTray.isSupported()) {
SystemTray tray = SystemTray.getSystemTray();
Image image = Toolkit.getDefaultToolkit().getImage(trayImageName);
PopupMenu popupMenu = new PopupMenu();
MenuItem restoreItem = new MenuItem("还原");
MenuItem exitItem = new MenuItem("退出");
restoreItem.addActionListener(new RestoreItemActionListener());
exitItem.addActionListener(new ExitItemActionListener());
popupMenu.add(restoreItem);
popupMenu.addSeparator();
popupMenu.add(exitItem);
trayIcon = new TrayIcon(image, tooltip, popupMenu);
trayIcon.addMouseListener(new TrayIconMouseListener());
//trayIcon.addActionListener(new TrayIconActionListener());
try {
tray.add(trayIcon);
}
catch (AWTException e) {
System.err.println(e);
}
}
else {
//..........
}
}
private class RestoreItemActionListener implements ActionListener {
public void actionPerformed(ActionEvent ae) {
comp.setVisible(true);
}
}
private class ExitItemActionListener implements ActionListener {
public void actionPerformed(ActionEvent ae) {
System.exit(0);
}
}
private class TrayIconMouseListener extends MouseAdapter {
public void mousePressed(MouseEvent me) {
if (me.getButton() == MouseEvent.BUTTON1) {
comp.setVisible(true);
}
}
}
/*
private class TrayIconActionListener implements ActionListener {
public void actionPerformed(ActionEvent ae) {
comp.setVisible(true);
}
}
*/
public static void createTray(Component comp, String trayImageName, String tooltip) {
new TrayFactory(comp, trayImageName, tooltip);
}
}
import java.awt.*;
import java.awt.event.*;
public class TrayFactory {
private TrayIcon trayIcon = null;
private Component comp = null;
private String trayImageName = null;
private String tooltip = null;
private TrayFactory(Component comp, String trayImageName, String tooltip) {
this.comp = comp;
this.trayImageName = trayImageName;
this.tooltip = tooltip;
init();
}
private void init() {
if (SystemTray.isSupported()) {
SystemTray tray = SystemTray.getSystemTray();
Image image = Toolkit.getDefaultToolkit().getImage(trayImageName);
PopupMenu popupMenu = new PopupMenu();
MenuItem restoreItem = new MenuItem("还原");
MenuItem exitItem = new MenuItem("退出");
restoreItem.addActionListener(new RestoreItemActionListener());
exitItem.addActionListener(new ExitItemActionListener());
popupMenu.add(restoreItem);
popupMenu.addSeparator();
popupMenu.add(exitItem);
trayIcon = new TrayIcon(image, tooltip, popupMenu);
trayIcon.addMouseListener(new TrayIconMouseListener());
//trayIcon.addActionListener(new TrayIconActionListener());
try {
tray.add(trayIcon);
}
catch (AWTException e) {
System.err.println(e);
}
}
else {
//..........
}
}
private class RestoreItemActionListener implements ActionListener {
public void actionPerformed(ActionEvent ae) {
comp.setVisible(true);
}
}
private class ExitItemActionListener implements ActionListener {
public void actionPerformed(ActionEvent ae) {
System.exit(0);
}
}
private class TrayIconMouseListener extends MouseAdapter {
public void mousePressed(MouseEvent me) {
if (me.getButton() == MouseEvent.BUTTON1) {
comp.setVisible(true);
}
}
}
/*
private class TrayIconActionListener implements ActionListener {
public void actionPerformed(ActionEvent ae) {
comp.setVisible(true);
}
}
*/
public static void createTray(Component comp, String trayImageName, String tooltip) {
new TrayFactory(comp, trayImageName, tooltip);
}
}
这个类的构造方法是private的,因为创建该类的实例不是我们的目的,另一方面是为了方便系统托盘的创建。
构造方法有3个参数:
第1个参数是一个Component,这就是您所要显示或隐藏的主窗体。当然,您把这个参数写成Component的子类也无妨,这里是为了增加类的通用性。
第2个参数是一个String,它是一个image文件的名称,将来用这个文件创建托盘图标TrayIcon。
第3个参数也是一个String,它是工具提示字符串,当您把鼠标放到托盘图标上的时候,托盘图标将弹出这个字符串的内容。
创建系统托盘的具体代码在方法private void init()中。
创建系统托盘的任务分为两个步骤:
首先创建托盘图标(TrayIcon),其次把托盘图标添加到系统托盘(SystemTray)中。
Java.awt.TrayIcon提供3种构造方法创建TrayIcon实例,这里采用第三种构造方法:
trayIcon = new TrayIcon(image, tooltip, popupMenu);
其中,image对象由TrayFactory类构造方法的第二个参数trayImageName创建:
Image image = Toolkit.getDefaultToolkit().getImage(trayImageName);
tooltip就是TrayFactory类构造方法的第三个参数
由于不能朝前引用,PopupMenu对象popupMenu必须在创建trayIcon对象之前创建,并给popup菜单项添加动作监听器来处理菜单项的动作(点击)事件,由于处理动作事件比较简单,这里不做具体分析,只对TrayIcon的鼠标事件做出说明。
我们希望在托盘图标上按下鼠标左键时显示主窗体,所以必须处理托盘图标的鼠标按下事件。我们用TrayIconMouseListener私有内部类(private inner class)来处理鼠标按下事件。不论按下鼠标左键还是右键,都会产生鼠标事件,都会引起mousePressed方法的调用,所以在这个方法中只处理左键而忽略右键,把右键留给popup菜单:
if (me.getButton() == MouseEvent.BUTTON1) {
comp.setVisible(true);
}
这时,就可以给init()方法中创建的TrayIcon对象trayIcon添加鼠标监听器了:
trayIcon.addMouseListener(new TrayIconMouseListener());
利用TrayFactory类对主应用创建系统托盘时,只需在主应用中调用该类的工厂方法即可:
TrayFactory.createTray(comp, trayImageName, tooltip);
注意这一句,一定要放在适当的位置:主应用从开始启动到启动完毕,必须有机会执行这一句。所以建议把这一句放在主应用的构造方法中,或者干脆放在显示主窗体的前一个语句的位置:
//其他语句
JFrame mainFrame = new JFrame("测试主窗体");
mainFrame.getContentPane().add(otherVisibleObj, BorderLayout.CENTER);
mainFrame.pack();
TrayFactory.createTray(mainFrame, "images/icon.png", "这是工具提示");
mainFrame.setVisible(true);
下面给出一个完整的例子。
主应用(MainApp.java)源代码如下:
CODE:
import java.awt.*;
import javax.swing.*;
public class MainApp {
private static void createAndShowGUI() {
JFrame mainFrame = new JFrame("测试主窗体");
JLabel jLabel = new JLabel("这是一个标签", SwingConstants.CENTER);
jLabel.setPreferredSize(new Dimension(400, 300));
mainFrame.getContentPane().add(jLabel, BorderLayout.CENTER);
mainFrame.pack();
TrayFactory.createTray(mainFrame, "images/icon.png", "你好,Java!\nHello,Java!");
mainFrame.setVisible(true);
}
public static void main(String[] args) {
String lf = UIManager.getSystemLookAndFeelClassName();
try {
UIManager.setLookAndFeel(lf);
}
catch(Exception e) {
}
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
import javax.swing.*;
public class MainApp {
private static void createAndShowGUI() {
JFrame mainFrame = new JFrame("测试主窗体");
JLabel jLabel = new JLabel("这是一个标签", SwingConstants.CENTER);
jLabel.setPreferredSize(new Dimension(400, 300));
mainFrame.getContentPane().add(jLabel, BorderLayout.CENTER);
mainFrame.pack();
TrayFactory.createTray(mainFrame, "images/icon.png", "你好,Java!\nHello,Java!");
mainFrame.setVisible(true);
}
public static void main(String[] args) {
String lf = UIManager.getSystemLookAndFeelClassName();
try {
UIManager.setLookAndFeel(lf);
}
catch(Exception e) {
}
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
为简单起见,可以把TrayFactory.java和MainApp.java放在同一目录下,把icon.png文件放在当前目录的images目录下。
发表评论
-
java获取项目路径
2010-12-16 13:40 1226在jsp和class文件中调用的相对路径不同。 在jsp里,根 ... -
CSS控制DIV圆角
2010-12-09 15:51 1925<!DOCTYPE HTML PUBLIC " ... -
强大的web打印功能
2010-08-24 11:17 11501.<html> 2.<head> ... -
一个java写的托盘练习
2010-08-14 15:48 1013package minsize;import javax.sw ... -
Hibernate中发生"Session is closed" 的另一种可能!
2010-07-17 23:39 1753Hibernate中发生"Session ... -
求园柱体的表面积和体积
2010-06-13 11:50 32721.先创建一个Point类,然后定义Trianglele类。在 ... -
写一个Point类,计算两个Point实例之间的距离;写一个判断点是否在圆内的方法。
2010-06-13 11:47 8017写一个Point类,计算 ... -
打印分页代码
2009-10-27 15:27 1252<!-- define some variables u ... -
非常好的打印预览代码
2009-10-27 15:24 1958<!DOCTYPE html PUBLIC &quo ... -
http上传文件深度解析-高性能http传输
2009-10-24 16:59 11377http上传文件深度解析-高性能http传输 2008-12 ... -
用java获得MAC地址
2009-10-14 15:55 2787package com.etong.bms; impor ... -
使用java2word向已经建好的表格里插入数据
2009-05-18 13:41 2777上一篇讲如何NEW一个已经填充好数据的表格出来,这篇我介绍 ... -
使用java2word向word文档里插入文本、表格、图片
2009-05-18 13:41 5941import java.util.ArrayList; ... -
JSP request对象属性列表
2009-05-15 15:05 3027<% out.println("Protoc ... -
LDAP 集成应用实例
2009-05-15 13:58 9313我们部门有一个系统是专门用来记录大家的请假和加班的.这个系统有 ... -
IBM Portal与单点登录、集成企业级应用
2009-05-15 11:19 3495IBM Portal与单点登录、集 ... -
WAP 服务器设置
2009-04-11 15:53 1748WAP 服务器设置 二十一世纪是信息的世纪,以IP技 ... -
本地图片预览
2009-04-01 17:11 1196<?xml version="1.0" ... -
图片预装载技术
2009-04-01 17:08 1233<html> <body> < ... -
鼠标中键放大缩小图片
2009-04-01 17:03 1889<!DOCTYPE HTML PUBLIC " ...
相关推荐
`SystemTray`是Java AWT(Abstract Window Toolkit)库中的一个类,它提供了一个接口来管理系统的托盘区域,允许应用程序在系统托盘中创建和维护图标,从而与用户进行交互。 在Windows系统中,这个功能通常被称为...
JavaFX并不直接支持系统托盘功能,但我们可以借助Java的`java.awt.SystemTray`类来实现这一功能。当用户点击应用程序的关闭按钮时,我们不会立即退出程序,而是将窗口最小化到系统托盘。以下是一个简单的实现步骤: ...
本文将详细介绍如何利用Java AWT包中的`SystemTray`类以及`TrayIcon`类来实现这一功能。 #### 一、理解`SystemTray`与`TrayIcon` 在Java中,`SystemTray`类是系统托盘的抽象表示,而`TrayIcon`则是放置在托盘中的...
使用`SystemTray.getSystemTray()`方法获取系统托盘对象。 ```java SystemTray tray = SystemTray.getSystemTray(); ``` 4. **创建图标**: 创建一个`ImageIcon`对象,使用你想要显示的图像,并用它来创建`...
其中,最显著的两个新特性当属`Desktop`类和`SystemTray`类的加入,它们使得Java应用能够更加无缝地集成到桌面环境中,提供了与操作系统更深层次的交互能力。 ### `Desktop`类 `Desktop`类是JDK 6中新增的一个类,...
7. **系统托盘**: Java提供SystemTray类来处理系统托盘功能。用户可以通过将悬浮球最小化到系统托盘,而不是关闭它。这需要实现TrayIcon类,并添加适当的监听器来处理点击事件。 8. **资源管理**: `icon`文件可能是...
总之,这段Java代码展示了如何使用Java Swing库和AWT工具类库创建一个具备基本GUI界面、事件响应能力以及系统托盘图标显示功能的词典应用。通过对这段代码的分析,我们不仅了解了Java GUI编程的基本框架,还学习了...
这个类是`java.awt.SystemTray`类的一部分,后者代表了系统的托盘区域。 2. **系统托盘的使用** 在Java程序中使用系统托盘首先需要检查系统是否支持该功能,因为不是所有操作系统都提供托盘区域。可以通过`...
在Java中,我们可以通过`SystemTray`类来检查是否支持托盘功能: ```java import java.awt.SystemTray; import java.awt.Toolkit; public class TrayDemo { public static void main(String[] args) { if (!...
本文将详细解析如何在Java中利用`java.awt.SystemTray`类实现托盘功能,并通过一个具体示例——JavaQQ实现托盘功能的过程来深入理解其工作原理。 #### 核心知识点:Java SystemTray API `java.awt.SystemTray`是...
首先,我们需要引入Java的`javax.swing.SystemTray`和`javax.swing.TrayIcon`类,这两个类是实现托盘功能的关键。`SystemTray`代表了操作系统的系统托盘区域,而`TrayIcon`则表示托盘中的图标及其关联的操作。 1. *...
这通常涉及到`java.awt.TrayIcon`和`java.awt.Toolkit`这两个类。`TrayIcon`是用于创建托盘图标的核心类,而`Toolkit`则提供了获取系统托盘实例的方法。 ```java import java.awt.TrayIcon; import java.awt....
下面将详细讲解如何使用Java代码生成系统托盘图标。 首先,你需要导入必要的Java库: ```java import java.awt.*; import javax.swing.*; ``` Java AWT中的`TrayIcon`类是用于创建系统托盘图标的对象。在使用之前...
1. 检查系统是否支持系统托盘:使用`SystemTray`类的静态方法`getSystemTray()`,如果返回`null`,则表示当前系统不支持系统托盘。 ```java if (SystemTray.isSupported()) { SystemTray tray = SystemTray....
在Java中,`SystemTray` 类代表了系统的托盘区域,而 `TrayIcon` 类则表示托盘区域中的图标及其关联的操作。我们首先需要检查系统是否支持系统托盘,因为并非所有操作系统都提供这个功能: ```java if (SystemTray....
这可以通过`java.awt.SystemTray`类的静态方法`isSupported()`来检查。 2. **获取系统托盘实例**:如果支持,我们可以调用`SystemTray.getSystemTray()`获取唯一的系统托盘实例。 3. **创建图标**:加载图像资源...
在Java中,首先需要检查当前系统是否支持系统托盘,这可以通过`SystemTray`类的静态方法`isSupported()`来判断。如果支持,可以通过`SystemTray.getSystemTray()`获取系统托盘实例,然后使用`add(TrayIcon)`方法将`...
你可以通过`java.awt.SystemTray`类的静态方法`isSupported()`来检查是否支持系统托盘。如果支持,可以通过`getSystemTray()`获取系统托盘实例。 2. **创建TrayIcon对象**: 创建一个`TrayIcon`对象,需要提供一个...
3. **系统托盘的应用**:Java允许程序创建系统托盘图标,这通常涉及到`java.awt.SystemTray`和`java.awt.TrayIcon`类的使用。这部分代码可能展示了如何在任务栏创建一个图标,并响应用户点击事件。 4. **哈弗曼编码...