==================== Enterprise Information Controller(EIC) =============== eic-tray Document created by:genww lasted modified:20110207 ****************************我是一个相当华丽的分割线******************************* 系统托盘程序相关说明文档 ****************************我是一个相当华丽的分割线******************************* 【第一章 必要说明】 1.1 注意事项 该程序没有依赖,但不能单独运行,需要由其他程序“调用”,如何调用见4.1 1.2 运行环境 本程序由java编写,运行需jre或jdk1.6+版本 1.3 相关依赖 无 ****************************我是一个相当华丽的分割线******************************* 【第二章 功能描述】 2.1 概要 系统托盘程序是企业级信息控制器(EIC)中的一个子程序,属于核心程序之一,jar包名称为eic-tray.jar。该包不需要依赖任何其他包。主要功能是在操作系统的任务栏上产生一个托盘(图标)。 2.2 托盘的作用 托盘就是在任务栏上产生一个图片,相当于EIC各种功能的入口,用户可以通过鼠标点击该图片等方式弹出菜单,选择相应功能并进行操作。托盘的作用如下: 1.猛击鼠标左键:激活功能菜单中的默认选项 2.猛击鼠标右键:弹出功能菜单,显示各种选项 3.在程序需要的时候,可通过托盘图标弹出消息气泡,该消息气泡是用户获得信息的主要方式之一 ****************************我是一个相当华丽的分割线******************************* 【第三章 相关扩展】 3.1 如何自定义功能菜单和扩展菜单内容 右击托盘菜单弹出的菜单不是写死在程序中的,而是通过配置文件trayMenuStruct.xml来定义的,所以可以任意方便的自定义菜单。 trayMenuStruct.xml配置文件中的内容如下(举例1): --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- 相关描述: 标签trayMenus:这是根标签,目前没有任何属性,表示里面的子标签为菜单。 标签trayMenu:是trayMenus标签的子标签,该标签用来定义功能菜单,包括显示在菜单上的选项名称,点击后的行为,菜单的树形结构等。该标签的属性如下: id 该菜单的id name 菜单名称(必要属性) action 菜单行为(必要属性),行为定义见3.2 param 菜单行为被调用后传入的参数,具体见3.2 default 是否默认菜单,如果为true,则直接双击任务栏图标就可以启动该菜单的行为,注:默认菜单可能会在运行时被更改 注:该标签的子标签仍可以有一个或多个标签trayMenu,表示菜单树形结构的父子关系。 扩展:系统除了支持读取trayMenuStruct.xml配置文件,实际上可以读取一个或多个trayMenuStruct-*.xml的文件,它们将同时被引用 3.2 菜单行为相关描述 菜单行为就是当鼠标点击叶子菜单后做出的动作或响应,一般由trayMenu标签的action定义,有时候需要配合param属性。 系统默认已定义好的行为或动作有(即trayMenu标签的action属性值): class:cn.com.genww.tray.menu.action.SystemMenuAction 这里简称SystemMenuAction class:cn.com.genww.tray.menu.action.CommandSupportAction 这里简称CommandSupportAction 下面详细描述这些行为: CommandSupportAction:该行为是用于调用操作系统的command,通过该行为可以做很多类似“快捷方式”的事情。command中内容则是trayMenu标签的param属性。 如:param="regedit" 则点击该行为的菜单后会弹出windows的注册表 SystemMenuAction:菜单系统相关行为,需配合trayMenu标签的param属性。 当param为exit时,表示退出EIC程序(目前SystemMenuAction行为类中仅此子行为) 扩展:如何创建自己的行为或动作,见4.2 ****************************我是一个相当华丽的分割线******************************* 【第四章 二次开发】 4.1 如何调用并产生托盘 下面是一个例子(举例2) --------------------------------------------------------------------------------- //注册默认action处理器(处理器作用见4.2) MenuActionCreaterContainer.addMenuActionProcesser(new MenuCreateActionByClass()); //获得Tray对象实例 ITray tray = Tray.getInstance(); //产生托盘 tray.createTray(); --------------------------------------------------------------------------------- 4.2 自定义菜单行为 要自定义菜单行为,首先要 注册 菜单的创建工厂,菜单通过指定的工厂来创建菜单(如何创建自己的工厂,见4.4)。 系统默认的菜单创建工厂为MenuCreateActionByClass,该工厂指定菜单创建方式为:支持加载类(java反射)的方式。 注:还有其他菜单创建工厂,如支持spring的bean创建,详见5.1 注册菜单创建工厂:见举例2 创建自己的菜单行为: 1)创建一个类,继承ITrayMenuAction接口,实现相关方法,即定义了行为 2)使用:在trayMenuStruct.xml中插入标签trayMenu到相应位置(方法见3.1),当用户点击菜单后则会执行相应动作 扩展:ITrayMenuAction接口中方法说明: --------------------------------------------------------------------------------- public interface ITrayMenuAction{ /** * 初始化操作 * @param menuId 得到配置文件定义的id * @param menuName 得到配置文件定义的菜单名称 * @param param 得到配置文件定义的参数 * @param menu 得到由该menu管理的menu引用 */ public void init(String menuId,String menuName,String param, MenuItem menu); /** * 点击菜单后的行为 */ public void menuAction(); /** * 当程序退出时触发 */ public void destroy(); } --------------------------------------------------------------------------------- 4.3 其他有用功能 1)给托盘程序添加listener,以监听如启动开始,启动完成等事件 --------------------------------------------------------------------------------- ITray tray = Tray.getInstance(); tray.setTrayInitListener(new ITrayInitListener(){...}); --------------------------------------------------------------------------------- 其中ITrayInitListener包含以下内容: --------------------------------------------------------------------------------- /** * 当托盘开始创建时触发 */ public void init(); /** * 当托盘和相关菜单创建完成后触发 */ public void initFinish(); /** * 当系统退出前时触发 */ public void destroy(); --------------------------------------------------------------------------------- 2)需关注的类:TrayConfig,配置托盘(该配置为系统级配置,内容如下) String iconName = "icon"; //托盘图标路径 String description; //托盘描述 PopupMenu pop; //菜单 ITrayMenuAction defaultMenuAction;//默认菜单行为,直接通过单击就可以触发 3)需关注的类:Tray,可通过ITray过滤并获得有用方法,有用方法如下 --------------------------------------------------------------------------------- /** * 判断系统是否支持托盘 * @return */ public abstract boolean isSupport(); /** * 创建托盘 * @throws AWTException * @throws IOException */ public abstract void createTray() throws AWTException, IOException; /** * 刷新托盘图标 * @throws IOException * @throws AWTException */ public abstract void flushImageIcon() throws IOException, AWTException; /** * 弹出气泡消息 * @param title * @param msg * @param type */ public abstract void showMessage(String title, String msg, MessageType type); /** * 销毁 */ public abstract void destroy(); /** * 设置listener * @param trayInitListener */ public void setTrayInitListener(ITrayInitListener trayInitListener); --------------------------------------------------------------------------------- 4.4 创建自己的菜单工厂 1)创建工厂,继承:IMenuActionCreater接口描述 2)注册工厂,方法见4.2,或举例2 扩展:IMenuActionCreater接口描述 --------------------------------------------------------------------------------- /** * 是否支持创建该动作或行为 * @param action 得到trayMenu标签的action属性值 * @return true则通过该处理器创建菜单,否则交给另外一个处理器去判断 */ boolean isSupport(String action); /** * 创建菜单动作或行为 * @param action * @return * @throws Exception */ ITrayMenuAction createMenuAction(String action) throws Exception; --------------------------------------------------------------------------------- ****************************我是一个相当华丽的分割线******************************* 【第五章 其他】 5.1 spring支持插件 详见eic-tray-springplugin插件文档