`
chowqingbao
  • 浏览: 11942 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

JAVA实现系统托盘

阅读更多

让界面更加绚丽 Java SE 6.0 GUI体验

  系统托盘

  现在有很多程序除了提供了一个完整的主界面外,在它最小化或者启动后在右下角的系统托盘区总是有一个小图标,如金山词霸、QQ和MSN等。图5显示了一台计算机的系统托盘里的图标。

  如果使用C++、Delphi(Pascal)等语言实现这个功能非常简单,只要调用一下系统API即可,但在以前版本(Java SE 5以前)的Java SE中Sun并未提供访问系统托盘的类,在那时使用Java访问系统托盘的唯一方法就是使用JNI直接调用系统API,但这种方法实现比较复杂,而且如果这样做,就破坏了Java的跨平台特性(除非你为每一个操作系统平台都做一个这样的类)。Java的这个缺陷缓和终于在Java SE 6中得到弥补。在java.awt包中提供了一个SystemTray类可以直接访问系统托盘。下面的代码演示了一个简单的实现。
import javax.swing.*;
import java.awt.*;

public class MyTray
{
 public static void main(String args[])
 {
  // 判断当前操作系统是否支持系统托盘
  // 最好加上这个判断,否则这个程序可能在其它操作系统上无法正常工作
  if (SystemTray.isSupported())
  {
   // 通过静态方法getSystemTray()得到系统托盘
   SystemTray tray = SystemTray.getSystemTray();
   // 装载托盘图象
   Image image = Toolkit.getDefaultToolkit().getImage("tray.gif");
   // 为这个托盘加一个弹出菜单
   PopupMenu popup = new PopupMenu();
   MenuItem item = new MenuItem("我的菜单");
   popup.add(item);
   // 为这个托盘加一个提示信息
   TrayIcon trayIcon = new TrayIcon(image, "提示信息", popup);
   try
   {
    tray.add(trayIcon);
   }
   catch (AWTException e)
   {
    System.err.println("无法向这个托盘添加新项: " + e);
   }
  }
  else
  {
   System.err.println("无法使用系统托盘!");
  }
 }
}

  在运行上面的程序之前,tray.gif一定要放到当前目录,如果放到其它的目录,要在程序中指明。图6是程序运行结果。最左侧的五彩光盘图标就是本程序加入了。

  如果多次调用tray.add(trayIcon),可以在一个程序中向系统托盘添加多个图标。但要注意,图象可以使用一个Image对象,但弹出菜单要为每一个图标建一个,如果不建,就设为null。如:
TrayIcon trayIcon1 = new TrayIcon(image, "提示信息1", null);
TrayIcon trayIcon2 = new TrayIcon(image, "提示信息2", null);
TrayIcon trayIcon3 = new TrayIcon(image, "提示信息3", null);
tray.add(trayIcon1);
tray.add(trayIcon2);
tray.add(trayIcon3);



  Java SE 6还为我们提供了3种提示信息,它们是警告、错误和信息。如使用如下语句添加提示信息。

  添加警告提示:
trayIcon.displayMessage("警告", "这是一个警告提示!", TrayIcon.MessageType.WARNING);


  添加错误提示:
trayIcon.displayMessage("错误", "这是一个错误提示!", TrayIcon.MessageType.ERROR);


  添加信息提示:
trayIcon.displayMessage("信息", "这是一个信息提示!", TrayIcon.MessageType.INFO);



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics