实现简单系统托盘
本帖最后由 xiaoye 于 2015-10-9 17:38 编辑SystemTray 类表示桌面的系统托盘。
在某些平台上,可能不存在或不支持系统托盘,在这种情况下,getSystemTray() 将抛出 UnsupportedOperationException。所以检查系统托盘是否受支持,使用 isSupported()。
SystemTray 可以包含一个或多个 TrayIcon,可以使用 add(java.awt.TrayIcon) 方法将它们添加到托盘,当不再需要托盘时,使用 remove(java.awt.TrayIcon) 移除它。TrayIcon 由图像、弹出菜单和一组相关侦听器组成。
每个 Java 应用程序都有一个 SystemTray 实例,在应用程序运行时,它允许应用程序与桌面系统托盘建立连接。SystemTray 实例可以通过 getSystemTray() 方法获得。应用程序不能创建自己的 SystemTray 实例。
首先将主界面弄出来。
import javax.swing.JFrame;
public class Test1 extends JFrame{
public Test1(){
setSize(300, 300);
setVisible(true);
}
public static void main(String[] args) {
new Test1();
}
}
接下来编写一个初始化系统托盘的方法。
private void SystemTrayInit(){
if(!SystemTray.isSupported()){//判断该系统是否支持系统托盘,如果不支持则结束方法运行。
return;
}
String title="提示文本标题";
String company="提示文本";
SystemTray sys=SystemTray.getSystemTray();//获取系统托盘实例
tr=new TrayIcon(Toolkit.getDefaultToolkit().createImage("images/icon.jpg"),title+"\n"+company,createMenu());
tr.setImageAutoSize(true);
tr.addActionListener(new SysTrayActionListener());添加动作监听
try {
sys.add(tr);//将TrayIcon添加到托盘
tr.displayMessage(title, company, MessageType.INFO);
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
TrayIcon 对象表示可以添加到系统托盘的托盘图标。TrayIcon 可以包含工具提示(文本)、图像、弹出菜单和一组与之关联的侦听器。
TrayIcon(Image image, String tooltip, PopupMenu popup)
创建带指定图像、工具提示和弹出菜单的 TrayIcon
Toolkit.getDefaultToolkit().createImage("images/icon.jpg")返回一个Image实列。
接下来是弹出菜单createMenu()
private PopupMenu createMenu() { // 创建系统栏菜单的方法
PopupMenu menu = new PopupMenu();
MenuItem exitItem = new MenuItem("退出");
exitItem.addActionListener(new ActionListener() { // 系统栏退出事件
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
MenuItem openItem = new MenuItem("打开");
openItem.addActionListener(new ActionListener() {// 系统栏打开菜单项事件
public void actionPerformed(ActionEvent e) {
if (!isVisible()) {
setVisible(true);
toFront();
} else
toFront();
}
});
menu.add(publicItem);
menu.add(openItem);
menu.addSeparator();
menu.add(exitItem);
return menu;
}
系统栏双击事件
class SysTrayActionListener implements ActionListener {// 系统栏双击事件
public void actionPerformed(ActionEvent e) {
setVisible(true);
toFront();
}
}
最终代码:
import java.awt.AWTException;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.TrayIcon.MessageType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JFrame;
public class Test extends JFrame implements WindowListener{
TrayIcon tr;
public Test(){
setSize(300, 400);
addWindowListener(this);
setVisible(true);
SystemTrayInit();
// setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
private void SystemTrayInit(){
if(!SystemTray.isSupported()){
return;
}
String title="提示文本标题";
String company="提示文本";
SystemTray sys=SystemTray.getSystemTray();
tr=new TrayIcon(Toolkit.getDefaultToolkit().createImage("images/icon.jpg"),title+"\n"+company,createMenu());
tr.setImageAutoSize(true);
tr.addActionListener(new SysTrayActionListener());
try {
sys.add(tr);
tr.displayMessage(title, company, MessageType.INFO);
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private PopupMenu createMenu() {
// TODO Auto-generated method stub
PopupMenu menu = new PopupMenu();
MenuItem exitItem = new MenuItem("退出");
exitItem.addActionListener(new ActionListener() { // 系统栏退出事件
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
MenuItem openItem = new MenuItem("打开");
openItem.addActionListener(new ActionListener() {// 系统栏打开菜单项事件
public void actionPerformed(ActionEvent e) {
if (!isVisible()) {
setVisible(true);
toFront();
} else
toFront();
}
});
menu.add(openItem);
menu.addSeparator();
menu.add(exitItem);
return menu;
}
class SysTrayActionListener implements ActionListener {// 系统栏双击事件
public void actionPerformed(ActionEvent e) {
setVisible(true);
toFront();
}
}
public static void main(String[] args) {
new Test();
}
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
setVisible(false);
}
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
} 感谢楼主的分享~ 感谢楼主的分享~ 学习学习技术,加油! 感谢楼主的分享~ 支持中国红客联盟(ihonker.org) 支持,看起来不错呢!