基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——项目实训总结报告
- 格式:pdf
- 大小:306.65 KB
- 文档页数:26
J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)的实训教学设计1、课程设计实训前的相关知识准备(1)企业级开发的关注点:稳定性、可扩展性、安全性、技术性(2)什么是MVC模式:什么?为什么要使用它?如何使用它?(3)Java的编码规范:包、类、方法和变量(对象)的命名所有名称:见名知意包名:反域名com.px1987.imsystem.模块名(4)OOP中的几个原则:依赖倒置原则、接口隔离原则、“OCP---开闭原则”和“单一责职”?Liskov替换原则!如何将这些原则在实际的应用系统开发中加以体现和遵守1)开放-闭合原则:模块应该对扩展开放,对修改关闭。
2)单一责职:应用系统中的一个具体的设计元素(类)只完成某一类的功能(职责)3)接口隔离原则:使用多个专门的接口比使用单一的复合总接口要优越4)Liskov替换原则:派生类要与其基类自相容,也就是基类中的抽象方法都要在子类中实现,并且一个具体的实现类应当只实现其接口和抽象类中所声明过的方法。
5)依赖倒置原则:高层模块不应依赖于底层模块,两者都应该依赖于抽象;抽象不应该依赖于细节实现,实现细节应该依赖于抽象。
(5)J2EE平台开发的两个基本原则“多层架构”和“松藕合”,如何在设计和实现等阶段达到此目标?(6)系统架构设计及设计模式的具体应用(7)各种主流的J2EE平台中的开源框架的具体应用2、指导教师需要了解目前学生所欠缺的知识和技术大家经过本学期的J2SE 应用开发、J2EE Web组件以及J2EE Web框架的学习,同时辅助Oracle数据库、需求工程、单元测试(JUnit)和集成测试等方面的技术和知识的学习。
应该初步掌握或者了解了目前企业级应用开发中所涉及的相关的知识。
但大家现在所缺少的是(1)实际的企业级项目开发的体验和锻炼(2)同时也还缺少对前面所学习的各种技术和知识的合理地应用的技巧(3)当然作为一位职业程序员所应该具备的软件规范化如设计的文档化、编码的规范化、软件测试等方面的体验并不多。
基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——详细设计说明书(第3部分)1.1.1用户界面设计规范1、设计说明本文档主要针对即时通讯系统的用户界面设计风格标准进行描述,从而为客户提供界面设计参考。
2、概念和定义(1)用户界面即人机界面,实现用户与计算机信息交换的软件与硬件部分,主要表现为用户与计算机之间的通信,以控制计算机或进行用户和计算机之间的数据传送的系统部件。
(2)GUI(Graphical User Interface)即图形用户界面,又称为图形用户界面接口,一种可视化的用户界面,它使用图形界面代替正文界面显示计算机操作用户界面,以实现更为轻松的人机互动。
3、用户群体假定使用本系统的用户定义为:对计算机与浏览器的基本用法有一定了解,希望系统界面设计能够实现一般即时通讯系统的功能,并且体现公司特色、符合公司形象,便于公司员工之间的交流,提高工作效率,对实时性、易用性、简洁性、安全性有较高的要求的用户。
4、用户界面设计原则(1)即时通讯系统坚持图形用户界面(GUI)设计原则界面直观、清晰,对用户透明化(即用户接触系统时不需要进行进一步的培训,就可以对系统的功能一目了然,进行所需操作)(2)即时通讯系统采用简约的设计风格便于用户识别,易于用户操作。
界面风格以干净、简洁为主,更适于人机交互。
(3)即时通讯系统各个功能界面坚持风格统一简洁干净,充分考虑用户的各种需求,利于提高公司效率,并保证了一定的信息安全性。
(4)界面一致性在界面设计中应该保持界面的一致性。
一致性既包括程序内部一致性,即为使用统一的界面元素、标准的控件,也包括使用相同的信息表现方法,如在字体、标签风格、颜色、术语、显示错误信息等方面确保一致;保持与约定俗成的习惯保持一致性,遵循界面规范。
从而确保界面整体风格以及细节风格具有一致性、整体感。
(5)显示信息一致性标准1)标签提示:字体为加重、楷体、黑色、蓝底或透明、无边框、居中、带冒号、一般情况为12px;2)日期:正常字体、宋体、白底黑字、3-D lowered;3)对齐方法:●居中:一般文字、单个数字、等。
基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——详细设计说明书(第2部分)6、邮件管理模块设计说明(1)程序功能描述设计目的:提醒用户有新邮件到达,并且用户可以接受和发送邮件。
(2)功能模块(3)系统性能1)搜索查询时间:最大不超过5秒。
2)页面平均处理及响应时间:1—3秒以内,最大不超过5秒。
3)页面平均更新响应时间:2秒左右,最大不超过3秒。
(4)输入- 处理–输出(IPO)流程1)被提醒有新邮件InputProcessing 服务器提醒用户有新邮件到达Output 显示新邮件提示框成功或失败2)接受邮件InputProcessing 服务器将邮件下载到本地机上Output 接受邮件成功或失败3)发送邮件Input 要接受此邮件的好友邮箱Processing 服务器将邮件发送到对方所在的服务器上Output 显示邮件发送成功或失败(5)接口(6)流程逻辑1)被提醒有新邮件2)接受邮件3)发送邮件(7)注释设计1)各模块及子模块首部应有本模块的功能说明;2)各功能函数的函数声明处应有参数含义、参数来源的说明;3)各功能函数内的变量声明处应有该变量的功能、范围、缺省条件等说明;4)各功能函数的函数体首应有该函数的处理逻辑的说明;5)各功能函数的函数体内关键语句处应有说明;(8)测试计划详见测试文档(9)尚未解决的问题暂无。
7、界面管理设计说明(1)程序功能描述设计目的:用户可以根据自己的习惯和喜好选择适合自己的界面,并且可以根据需要搜索好友,或者相关网页内容。
(2)功能模块(3)系统性能1)传输时间:精确到秒。
2)事务页面平均处理及响应时间:1—3秒以内,最大不超过5秒。
(4)输入–处理–输出(IPO)流程1)面板设置InputProcessing 根据用户的选择,对侧边栏、个人信息及快速启动栏中相应的配置文件进行修改,添加或者删除相应的项,在用户点击【应用】后重绘界面,并把修改后的信息保存。
java swing QQ 项目总结1100字Java Swing QQ项目总结随着移动互联网和社交网络的兴起,QQ已经成为了我们日常生活和职场中必不可少的工具之一。
然而,除了在PC端使用QQ外,我们现在也可以在移动设备上通过QQ聊天、发送文件以及进行语音与视频通话。
作为一名Java开发者,学习和实践Java Swing QQ项目成为了我提升编程技能的一种方式。
一、项目概述Java Swing QQ项目是一个使用Java Swing框架开发的桌面应用软件,它通过模仿QQ的外观和功能,实现了在PC端聊天、发送文件及语音+视频通话等功能。
该项目适用于Java开发者以及Java Swing初学者,帮助他们更加深入地了解Swing组件、多线程编程、Socket编程以及UI设计等知识。
二、项目实现1. 项目框架Java Swing QQ项目采用了MVC框架,即Model、View、Controller模型。
其中Model负责数据的存储和处理,View负责界面的显示和交互,Controller负责模型和视图之间的交互。
通过该框架,开发人员可以更好地管理和维护程序,同时也方便了横向拓展和维护。
2. UI设计Java Swing QQ项目的UI设计采用了大量的Swing组件,如JFrame、JPanel、JLabel、JButton、JTextField等等。
其中,为了能够实现QQ的外观和功能,我们也使用了一些定制化的组件,并添加了自己的样式文件。
值得一提的是,为了方便用户的使用,我们还实现了QQ的拖动窗口、滚动条美化以及实时聊天自动滚动等效果。
3. 多线程编程Java Swing QQ项目实现了多线程编程,以实现UI界面的实时更新和线程的并发执行。
在该项目中,我们主要使用Java 中的SwingWorker和Java线程池来实现多线程编程。
通过合理地使用多线程,不仅可以提高程序的效率和性能,同时也不会使程序出现卡死和阻塞的问题。
J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——构建出客户端项目和共用功能类(第2部分)6、添加系统中异常信息日志记录的功能实现(1)日志记录信息的接口ExceptionLogInterface,包名称为com.px1987.imsystem.client.loginfo.interpackage com.px1987.imsystem.client.loginfo.inter;public interface ExceptionLogInterface {public void logInfo(String logInfoText);}(2)ExceptionLogInterface接口的实现类ExceptioLogObserverByJDKLogAPI,包名称为com.px1987.imsystem.client.loginfo.imple,并且还实现java.util.Observer接口package com.px1987.imsystem.client.loginfo.imple;import java.util.Observable;import java.util.Observer;import java.util.logging.Level;import java.util.logging.Logger;import com.px1987.imsystem.client.loginfo.inter.ExceptionLogInterface;public class ExceptioLogObserverByJDKLogAPI implements Observer, ExceptionLogInterface {public ExceptioLogObserverByJDKLogAPI() {super();}public void update(Observable o, Object arg) {String logInfo = o.getClass().getName() + "类出现了" +arg.getClass().getName() + "类型的异常,并且异常内容为:"+ ( (Exception) arg).getMessage();logInfo(logInfo);}public void logInfo(String logInfoText) {Logger logger = Logger.getLogger(this.getClass().getName());logger.log(, logInfoText);}}(3)ExceptionLogInterface接口的实现类ExceptioLogObserverByLog4J,包名称为com.px1987.imsystem.client.loginfo.imple,并且还实现java.util.Observer接口package com.px1987.imsystem.client.loginfo.imple;import java.util.Observable;import java.util.Observer;import java.util.logging.Level;import java.util.logging.Logger;import com.px1987.imsystem.client.loginfo.inter.ExceptionLogInterface;public class ExceptioLogObserverByLog4J implements Observer, ExceptionLogInterface { public ExceptioLogObserverByLog4J() {super();}public void update(Observable o, Object arg) {String logInfo = o.getClass().getName() + "类出现了" +arg.getClass().getName() + "类型的异常,并且异常内容为:"+ ( (Exception) arg).getMessage();logInfo(logInfo);}public void logInfo(String logInfoText) {Logger logger = Logger.getLogger(this.getClass().getName());logger.log(, logInfoText);}}(3)ExceptionLogInterface接口的实现类ExceptioLogObserverSaveToTextFile,包名称为com.px1987.imsystem.client.loginfo.imple,并且还实现java.util.Observer接口package com.px1987.imsystem.client.loginfo.imple;import java.io.FileNotFoundException;import java.io.IOException;import java.io.RandomAccessFile;import java.util.Observable;import java.util.Observer;import com.px1987.imsystem.client.loginfo.inter.ExceptionLogInterface;import com.px1987.imsystem.client.util.DateAndTimeUtil;public class ExceptioLogObserverSaveToTextFile implements Observer, ExceptionLogInterface{ public ExceptioLogObserverSaveToTextFile() {super();}public void update(Observable o, Object arg) {String logInfo = o.getClass().getName() + "类出现了" +arg.getClass().getName() + "类型的异常,并且异常内容为:"+ ( (Exception) arg).getMessage();logInfo(logInfo);}public void logInfo(String logInfoText) {RandomAccessFile logInfoFileStream=null;try{try {logInfoFileStream =new RandomAccessFile("imSystemExceptionLogInfo.txt","rw");} catch (FileNotFoundException exception) {exception.printStackTrace();}try {logInfoFileStream.seek(logInfoFileStream.length()) ;} catch (IOException exception) {exception.printStackTrace();}try {StringBuffer logInfoTimeAndLogInfo=new StringBuffer(); logInfoTimeAndLogInfo.append(DateAndTimeUtil.getCurrentDateAndTimeString());logInfoTimeAndLogInfo.append("产生了下面的错误:");logInfoTimeAndLogInfo.append(logInfoText);String totalLogInfoTimeAndLogInfo=logInfoTimeAndLogInfo.toString();logInfoFileStream.write(totalLogInfoTimeAndLogInfo.getBytes("gb2312"));} catch (IOException exception) {exception.printStackTrace();}}finally{try {logInfoFileStream.close();} catch (IOException exception) {exception.printStackTrace();}}}}7、服务器端XML配置文件解析的功能实现(1)ParseSystemConfigXMLFileByJDOMInterface接口,包名称为com.px1987.imsystem.client.xmlparse.interpackage com.px1987.imsystem.client.xmlparse.inter;import java.util.HashMap;import org.jdom.Document;import com.px1987.imsystem.client.exception.IMSystemException;public interface ParseSystemConfigXMLFileByJDOMInterface {public Document getXMLDocumentFromFile(String xmlFileName) throws IMSystemException;/*** 返回XML文件的数据,用一个HashMap进行的封装* @param org.jdom.Document* @return HaspMap<String,String>*/public HashMap<String, String> getXMLTagData(Document oneDocument);}(2)ParseSystemConfigXMLFileByJDOMInterface接口的实现类ParseSystemConfigXMLFileByJDOMImple,包名称为com.px1987.imsystem.client.xmlparse.imple,并且继承于java.util.Observable类package com.px1987.imsystem.client.xmlparse.imple;import java.io.FileNotFoundException;import java.io.IOException;import java.util.HashMap;import java.util.Iterator;import java.util.Observable;import org.jdom.Document;import org.jdom.Element;import org.jdom.JDOMException;import org.jdom.input.SAXBuilder;import com.px1987.imsystem.client.constant.IMSystemClientAppConstant;import com.px1987.imsystem.client.exception.IMSystemException;import com.px1987.imsystem.client.factory.ExceptionLogInfoFactory;importcom.px1987.imsystem.client.xmlparse.inter.ParseSystemConfigXMLFileByJDOMInterface; public class ParseSystemConfigXMLFileByJDOMImple extends Observable implements ParseSystemConfigXMLFileByJDOMInterface{public ParseSystemConfigXMLFileByJDOMImple() {super();}public Document getXMLDocumentFromFile(String xmlFileName) throws IMSystemException {Document xmlDocument = null;try {//获得org.jdom.input.SAXBuilder的一个实例,用来获得XML文档。
基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——概要设计说明书1.1.1引言1、编写目的编写概要设计说明书的主要目的就是简单的对系统的整体结构做出描述,是对项目的全局说明,让阅读人员明确项目的总体目标以及模块划分。
因此,本概要设计说明书的编写目的主要是对该项目进行总体设计,在明确系统需求的基础上划分系统的功能模块和描述子系统之间的关系和模块之间的关系、描述子系统的功能和模块的功能,进行系统开发的分工,明确各模块间的接口,进一步细化软件设计阶段得出的软件总体概貌,将其加工成在程序细节上非常接近于源程序的软件表示,为进行后面的详细设计和实现做准备。
具体目的有:(1)为编码人员提供依据;(2)为修改、维护提供条件;(3)方便项目组长制定计划书并按其要求布置和控制开发工作全过程;(4)为阶段性和总结性的质量验证和确认提供依据;2、预期读者本概要设计说明书的预期读者为项目开发组全体人员,尤其是编码人员,及本项目的客户——蓝梦教育集团工作人员。
3、定义(1)IM企业即时通讯(Instant Messenger),简称IM系统。
(2)客户项目投资方,在此为蓝梦教育集团。
(3)用户产品的最终使用者,在此为蓝梦教育集团的员工。
(4)UIUser Interface 用户界面。
(5)B/SBrowser/Server 浏览器/服务器。
(6)RDRequirement and Demand 需求。
(7)PRSProduct Requirement Specification Standard 产品需求规格说明。
(8)J2EEJava2 Enterprise Edition Java2企业版。
4、参考资料(1)J2EE项目实训Hibernate框架技术(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社 2008 年5月(2)J2EE项目实训Spring框架技术(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社 2008 年5月(3)J2EE项目实训UML及设计模式(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社 2008 年5月(4)J2EE项目实训Struts框架技术(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社2008 年10月(5)《精通Struts设计与开发》作者:孙卫琴电子工业出版社(6)《Spring从入门到精通》作者:郭锋清华大学出版社(7)《Hibernate开发技术祥解》作者:孙卫琴电子工业出版社(8)《J2EE应用开发技术祥解》作者:刘晓华电子工业出版社(9)《设计模式》作者:Erich Gamma等机械工业出版社1.1.2系统需求规定1、各个功能模块2、系统运行环境(1)软件环境(2)硬件环境3、系统开发环境(1)软件环境(2)硬件环境4、系统测试环境1.1.3基本设计概念和处理流程1、基本设计概念本系统采用B/S与C/S混合编程的开发模式,将蓝梦教育集团IM(即时通讯)系统分为九个功能模块,分别是用户登录模块登录、用户聊天模块、消息管理模块、邮件管理模块、界面管理模块、系统设置模块、用户信息管理模块、好友管理模块、群管理模块,在全面的涵盖企业及时通讯系统应有的功能的同时,也使本系统的功能划分更加清晰明了。
J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——完善客户端系统信息主窗口类中的各个子面板和弹出式菜单程序类(第2/2部分)1.1.1实现相关的弹出式菜单的功能1、FriendInfoTreeNodeSelfPopupMenu类(1)类名称为FriendInfoTreeNodeSelfPopupMenu,包名称为com.px1987.imsystem.client.frame.imsystemmainframe.tree,继承于ponent.SelfDefineJPopupMenu_ImageBar类(2)编程该类package com.px1987.imsystem.client.frame.imsystemmainframe.tree;import javax.swing.ImageIcon;import javax.swing.JCheckBoxMenuItem;import javax.swing.JMenuItem;import ponent.SelfDefineJCheckBoxMenuItem;import ponent.SelfDefineJMenuItem;import ponent.SelfDefineJPopupMenu_ImageBar;import com.px1987.imsystem.client.frame.IMSystemMainFrame;public class FriendInfoTreeNodeSelfPopupMenu extends SelfDefineJPopupMenu_ImageBar { private static final long serialVersionUID = -3719946677412611465L;private IMSystemMainFrame oneIMSystemMainFrame=null;public IMSystemMainFrame getOneIMSystemMainFrame() {return oneIMSystemMainFrame;}public void setOneIMSystemMainFrame(IMSystemMainFrame oneIMSystemMainFrame) { this.oneIMSystemMainFrame = oneIMSystemMainFrame;}private JMenuItem imSpaceMenuItem = null;private JMenuItem onePersonInfoMenuItem = null;private JMenuItem updateMyHeadImageMenuItem = null;private JCheckBoxMenuItem showMyHeadImageCheckBoxMenuItem = null;private JMenuItem netRecordMenuItem = null;private JMenuItem graftMenuItem =null;public FriendInfoTreeNodeSelfPopupMenu() {super();}public FriendInfoTreeNodeSelfPopupMenu(String label,IMSystemMainFrame oneIMSystemMainFrame) {super(label);this.oneIMSystemMainFrame=oneIMSystemMainFrame;createThisTreeNodeSelfPopupMenu();}public FriendInfoTreeNodeSelfPopupMenu(String label) {super(label);}public FriendInfoTreeNodeSelfPopupMenu(ImageIcon imageIcon) {super(imageIcon);}private void createThisTreeNodeSelfPopupMenu(){imSpaceMenuItem = new SelfDefineJMenuItem();imSpaceMenuItem.setText("IM 空间");imSpaceMenuItem.setIcon(newImageIcon(getClass().getResource("/images/treePopMenu/sefttree1.jpg")));this.add(imSpaceMenuItem);onePersonInfoMenuItem= new SelfDefineJMenuItem();onePersonInfoMenuItem.setText("个人资料");this.add(onePersonInfoMenuItem);updateMyHeadImageMenuItem = new SelfDefineJMenuItem();updateMyHeadImageMenuItem.setText("更改我的头像");this.add(updateMyHeadImageMenuItem);showMyHeadImageCheckBoxMenuItem = new SelfDefineJCheckBoxMenuItem();showMyHeadImageCheckBoxMenuItem.setSelected(true);showMyHeadImageCheckBoxMenuItem.setText("显示我的头像");this.add(showMyHeadImageCheckBoxMenuItem);netRecordMenuItem = new SelfDefineJMenuItem();netRecordMenuItem.setText("网络备完录");netRecordMenuItem.setIcon(newImageIcon(getClass().getResource("/images/treePopMenu/sefttree2.jpg")));this.add(netRecordMenuItem);graftMenuItem = new SelfDefineJMenuItem();graftMenuItem.setText("送礼许愿");graftMenuItem.setIcon(newImageIcon(getClass().getResource("/images/treePopMenu/sefttree3.jpg")));this.add(graftMenuItem);}}2、FriendInfoTreeNodePopupMenu类(1)类名称为FriendInfoTreeNodePopupMenu,包名称为com.px1987.imsystem.client.frame.imsystemmainframe.tree,继承于ponent.SelfDefineJPopupMenu_ImageBar类(2)编程该类package com.px1987.imsystem.client.frame.imsystemmainframe.tree;import javax.swing.ButtonGroup;import javax.swing.ImageIcon;import javax.swing.JCheckBoxMenuItem;import javax.swing.JMenu;import javax.swing.JMenuItem;import ponent.SelfDefineJCheckBoxMenuItem;import ponent.SelfDefineJMenu;import ponent.SelfDefineJMenuItem;import ponent.SelfDefineJPopupMenu_ImageBar;import com.px1987.imsystem.client.frame.IMSystemMainFrame;importcom.px1987.imsystem.client.frame.imsystemmainframe.treeevent.FriendInfoTreeNodePopupMe nu_ActionListenerEventHandler;import com.px1987.imsystem.client.util.IMSystemClientUtils;public class FriendInfoTreeNodePopupMenu extends SelfDefineJPopupMenu_ImageBar { private static final long serialVersionUID = 8215073581183947613L;private IMSystemMainFrame oneIMSystemMainFrame=null;private JMenu personHeadImageMenu = null;private JCheckBoxMenuItem bigHeadImageMenuItem = null;private JCheckBoxMenuItem smallHeadImageMenuItem =null;private JCheckBoxMenuItem standardHeadImageMenuItem = null;private JCheckBoxMenuItem showMyHeadImageMenuItem = null;private JMenu nameInfoShowMenu =null;private JCheckBoxMenuItem showAnnotationInfoMenuItem = null;private JCheckBoxMenuItem showLoveNameInfoMenuItem = null;private JMenu columnShowMenu = null;private JCheckBoxMenuItem singleShowMenuItem = null;private JCheckBoxMenuItem multiShowMenuItem = null;private JCheckBoxMenuItem showClearInfoMenuItem = null;private JCheckBoxMenuItem slideEffectMenuItem = null;private JMenu sortShowMenu = null;private JCheckBoxMenuItem sortByIDMenuItem = null;private JCheckBoxMenuItem sortByUpdateTimeMenuItem =null;private JCheckBoxMenuItem sortByNameMenuItem = null;private JMenuItem showOnLinePersonInfoMenuItem = null;private JCheckBoxMenuItem showNoKnownPersonGroupInfoMenuItem =null;private JCheckBoxMenuItem showBlockNameListMenuItem = null;private JMenuItem addNewGroupInfoMenuItem = null;private JMenuItem addNewFriendMenuItem = null;private JMenuItem renameMenuItem = null;private JMenuItem deleteThisGroupMenuItem = null;public FriendInfoTreeNodePopupMenu() {super();}public FriendInfoTreeNodePopupMenu(String label) {super(label);}public FriendInfoTreeNodePopupMenu(String label,IMSystemMainFrame oneIMSystemMainFrame) {super(label);this.oneIMSystemMainFrame=oneIMSystemMainFrame;createThisTreeNodePopupMenu();}public FriendInfoTreeNodePopupMenu(ImageIcon imageIcon) {super(imageIcon);}private void createThisTreeNodePopupMenu(){initThisTreeNodePopupMenu();createAllMenuAndMenuItemForThisPopup();}private void initThisTreeNodePopupMenu(){this.setBackground(IMSystemClientUtils.getNoSerializableVOInstance().getLoginFormBgColor());}private void createAllMenuAndMenuItemForThisPopup(){personHeadImageMenu = new SelfDefineJMenu();personHeadImageMenu.setText("头像显示方式");personHeadImageMenu.setIcon(new ImageIcon(getClass().getResource("/images/treePopMenu/headimage.jpg")));this.add(personHeadImageMenu);ButtonGroup oneButtonGroup=new ButtonGroup();bigHeadImageMenuItem = new SelfDefineJCheckBoxMenuItem();oneButtonGroup.add(bigHeadImageMenuItem);smallHeadImageMenuItem = new SelfDefineJCheckBoxMenuItem();oneButtonGroup.add(smallHeadImageMenuItem);standardHeadImageMenuItem = new SelfDefineJCheckBoxMenuItem();oneButtonGroup.add(standardHeadImageMenuItem);bigHeadImageMenuItem.setText("大头像");bigHeadImageMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "bigHeadImageMenuItem_onClick"));smallHeadImageMenuItem.setText("小头像");smallHeadImageMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "smallHeadImageMenuItem_onClick"));standardHeadImageMenuItem.setText("标准头像");standardHeadImageMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "standardHeadImageMenuItem_onClick"));showMyHeadImageMenuItem = new SelfDefineJCheckBoxMenuItem();showMyHeadImageMenuItem.setText("显示我的头像");showMyHeadImageMenuItem.setSelected(true);showMyHeadImageMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "showMyHeadImageMenuItem_onClick"));personHeadImageMenu.add(bigHeadImageMenuItem);personHeadImageMenu.add(smallHeadImageMenuItem);personHeadImageMenu.add(standardHeadImageMenuItem);personHeadImageMenu.addSeparator();personHeadImageMenu.add(showMyHeadImageMenuItem);nameInfoShowMenu = new SelfDefineJMenu();nameInfoShowMenu.setText("名称显示");this.add(nameInfoShowMenu);ButtonGroup twoButtonGroup=new ButtonGroup();showAnnotationInfoMenuItem = new SelfDefineJCheckBoxMenuItem();twoButtonGroup.add(showAnnotationInfoMenuItem);showLoveNameInfoMenuItem = new SelfDefineJCheckBoxMenuItem();twoButtonGroup.add(showLoveNameInfoMenuItem);showAnnotationInfoMenuItem.setText("显示备注");showAnnotationInfoMenuItem.setSelected(true);showAnnotationInfoMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "showAnnotationInfoMenuItem_onClick"));showLoveNameInfoMenuItem.setText("显示昵称");showLoveNameInfoMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "showLoveNameInfoMenuItem_onClick"));nameInfoShowMenu.add(showAnnotationInfoMenuItem);nameInfoShowMenu.add(showLoveNameInfoMenuItem);columnShowMenu = new SelfDefineJMenu();columnShowMenu.setText("列表显示");this.add(columnShowMenu);ButtonGroup threeButtonGroup = new ButtonGroup();singleShowMenuItem = new SelfDefineJCheckBoxMenuItem();threeButtonGroup.add(singleShowMenuItem);multiShowMenuItem = new SelfDefineJCheckBoxMenuItem();threeButtonGroup.add(multiShowMenuItem);singleShowMenuItem.setText("单列显示");singleShowMenuItem.setSelected(true);singleShowMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "singleShowMenuItem_onClick"));columnShowMenu.add(singleShowMenuItem);multiShowMenuItem.setText("多列平铺");multiShowMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "multiShowMenuItem_onClick"));columnShowMenu.add(multiShowMenuItem);columnShowMenu.addSeparator();showClearInfoMenuItem = new SelfDefineJCheckBoxMenuItem();showClearInfoMenuItem.setText("显示清爽资料");showClearInfoMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "ShowClearInfoMenuItem_onClick"));columnShowMenu.add(showClearInfoMenuItem);slideEffectMenuItem = new SelfDefineJCheckBoxMenuItem();slideEffectMenuItem.setText("滑动效果");slideEffectMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "slideEffectMenuItem_onClick"));columnShowMenu.addSeparator();columnShowMenu.add(slideEffectMenuItem);this.addSeparator();sortShowMenu = new SelfDefineJMenu();sortShowMenu.setText("排序显示");this.add(sortShowMenu);ButtonGroup fourButtonGroup = new ButtonGroup();sortByIDMenuItem = new SelfDefineJCheckBoxMenuItem();fourButtonGroup.add(sortByIDMenuItem);sortByUpdateTimeMenuItem = new SelfDefineJCheckBoxMenuItem();fourButtonGroup.add(sortByUpdateTimeMenuItem);sortByNameMenuItem = new SelfDefineJCheckBoxMenuItem();fourButtonGroup.add(sortByNameMenuItem);sortByIDMenuItem.setText("按身份标识排序");sortByUpdateTimeMenuItem.setText("按服务更新排序");sortByNameMenuItem.setText("按名称排序");sortShowMenu.add(sortByIDMenuItem);sortShowMenu.add(sortByUpdateTimeMenuItem);sortShowMenu.add(sortByNameMenuItem);this.addSeparator();showOnLinePersonInfoMenuItem = new SelfDefineJMenuItem();showOnLinePersonInfoMenuItem.setText("显示在线联系人");this.add(showOnLinePersonInfoMenuItem);this.addSeparator();showNoKnownPersonGroupInfoMenuItem = new SelfDefineJCheckBoxMenuItem();showNoKnownPersonGroupInfoMenuItem.setText("显示陌生人分组");showNoKnownPersonGroupInfoMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "showNoKnownPersonGroupInfoMenuItem_onClick"));this.add(showNoKnownPersonGroupInfoMenuItem);showBlockNameListMenuItem = new SelfDefineJCheckBoxMenuItem();showBlockNameListMenuItem.setText("显示黑名单");showBlockNameListMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "showBlockNameListMenuItem_onClick"));this.add(showBlockNameListMenuItem);this.addSeparator();addNewGroupInfoMenuItem = new SelfDefineJMenuItem();addNewGroupInfoMenuItem.setText("添加分组");addNewGroupInfoMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "addNewGroupInfoMenuItem_onClick"));this.add(addNewGroupInfoMenuItem);addNewFriendMenuItem = new SelfDefineJMenuItem();addNewFriendMenuItem.setText("添加联系人");addNewFriendMenuItem.setIcon(new ImageIcon(getClass().getResource("/images/treePopMenu/addFriend.jpg")));addNewFriendMenuItem.addActionListener(new FriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "addNewFriendMenuItem_onClick"));this.add(addNewFriendMenuItem);this.addSeparator();renameMenuItem = new SelfDefineJMenuItem();renameMenuItem.setText("重命名");renameMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "renameMenuItem_onClick"));deleteThisGroupMenuItem = new SelfDefineJMenuItem();deleteThisGroupMenuItem.setText("删除该组");deleteThisGroupMenuItem.setIcon(new ImageIcon(getClass().getResource("/images/treePopMenu/deleteGroup.jpg")));deleteThisGroupMenuItem.addActionListener(new FriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "deleteThisGroupMenuItem_onClick"));this.add(renameMenuItem);this.add(deleteThisGroupMenuItem);}public JMenuItem getDeleteThisGroupMenuItem() {return deleteThisGroupMenuItem;}public JMenuItem getRenameMenuItem() {return renameMenuItem;}public JMenuItem getAddNewGroupInfoMenuItem() {return addNewGroupInfoMenuItem;}}3、FriendInfoTreeNodePopupMenu_byClickOut类(1)类名称为FriendInfoTreeNodePopupMenu_byClickOut,包名称为com.px1987.imsystem.client.frame.imsystemmainframe.tree,继承于ponent.SelfDefineJPopupMenu_ImageBar类(2)编程该类package com.px1987.imsystem.client.frame.imsystemmainframe.tree;import javax.swing.ButtonGroup;import javax.swing.ImageIcon;import javax.swing.JCheckBoxMenuItem;import javax.swing.JMenu;import javax.swing.JMenuItem;import ponent.SelfDefineJCheckBoxMenuItem;import ponent.SelfDefineJMenu;import ponent.SelfDefineJMenuItem;import ponent.SelfDefineJPopupMenu_ImageBar;import com.px1987.imsystem.client.frame.IMSystemMainFrame;importcom.px1987.imsystem.client.frame.imsystemmainframe.event.IMSystemMainFrame_ActionList enerEventHandler;public class FriendInfoTreeNodePopupMenu_byClickOut extends SelfDefineJPopupMenu_ImageBar {private static final long serialVersionUID = -8871613980569893992L;private IMSystemMainFrame oneIMSystemMainFrame=null;private JMenu personHeadImageMenu_byClickOut = null;private JCheckBoxMenuItem bigHeadImageMenuItem_byClickOut = null;private JCheckBoxMenuItem smallHeadImageMenuItem_byClickOut = null;private JCheckBoxMenuItem standardHeadImageMenuItem_byClickOut = null;private JCheckBoxMenuItem showMyHeadImageMenuItem_byClickOut = null;private JMenu nameInfoShowMenu_byClickOut = null;private JCheckBoxMenuItem showAnnotationInfoMenuItem_byClickOut = null;private JCheckBoxMenuItem showLoveNameInfoMenuItem_byClickOut = null;private JMenu columnShowMenu_byClickOut = null;private JCheckBoxMenuItem singleShowMenuItem_byClickOut = null;private JCheckBoxMenuItem multiShowMenuItem_byClickOut =null;private JCheckBoxMenuItem ShowClearInfoMenuItem_byClickOut = null;private JCheckBoxMenuItem slideEffectMenuItem_byClickOut = null;private JMenu sortShowMenu_byClickOut = new SelfDefineJMenu();private JCheckBoxMenuItem sortByIDMenuItem_byClickOut = null;private JCheckBoxMenuItem sortByUpdateTimeMenuItem_byClickOut = null;private JCheckBoxMenuItem sortByNameMenuItem_byClickOut = null;private JMenuItem showOnLinePersonInfoMenuItem_byClickOut = null;private JCheckBoxMenuItem showNoKnownPersonGroupInfoMenuItem_byClickOut =null;private JCheckBoxMenuItem showBlockNameListMenuItem_byClickOut = null;public FriendInfoTreeNodePopupMenu_byClickOut() {super();}public FriendInfoTreeNodePopupMenu_byClickOut(String label) {super(label);}public FriendInfoTreeNodePopupMenu_byClickOut(String label,IMSystemMainFrame oneIMSystemMainFrame) {super(label);this.oneIMSystemMainFrame=oneIMSystemMainFrame;createThisTreeNodePopupMenu_byClickOut();}public FriendInfoTreeNodePopupMenu_byClickOut(ImageIcon imageIcon) { super(imageIcon);}private void createThisTreeNodePopupMenu_byClickOut(){personHeadImageMenu_byClickOut = new SelfDefineJMenu();personHeadImageMenu_byClickOut.setText("头像显示方式");personHeadImageMenu_byClickOut.setIcon(new ImageIcon(getClass().getResource("/images/treePopMenu/headimage.jpg")));this.add(personHeadImageMenu_byClickOut);ButtonGroup oneButtonGroup=new ButtonGroup();bigHeadImageMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();oneButtonGroup.add(bigHeadImageMenuItem_byClickOut);smallHeadImageMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();oneButtonGroup.add(smallHeadImageMenuItem_byClickOut);standardHeadImageMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();oneButtonGroup.add(standardHeadImageMenuItem_byClickOut);bigHeadImageMenuItem_byClickOut.setText("大头像");bigHeadImageMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"bigHeadImageMenuItem_onClick"));smallHeadImageMenuItem_byClickOut.setText("小头像");smallHeadImageMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"smallHeadImageMenuItem_onClick"));standardHeadImageMenuItem_byClickOut.setText("标准头像");standardHeadImageMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"standardHeadImageMenuItem_onClick"));showMyHeadImageMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();showMyHeadImageMenuItem_byClickOut.setText("显示我的头像");showMyHeadImageMenuItem_byClickOut.setSelected(true);showMyHeadImageMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"showMyHeadImageMenuItem_onClick"));personHeadImageMenu_byClickOut.add(bigHeadImageMenuItem_byClickOut);personHeadImageMenu_byClickOut.add(smallHeadImageMenuItem_byClickOut);personHeadImageMenu_byClickOut.add(standardHeadImageMenuItem_byClickOut);personHeadImageMenu_byClickOut.addSeparator();personHeadImageMenu_byClickOut.add(showMyHeadImageMenuItem_byClickOut);nameInfoShowMenu_byClickOut = new SelfDefineJMenu();nameInfoShowMenu_byClickOut.setText("名称显示");this.add(nameInfoShowMenu_byClickOut);ButtonGroup twoButtonGroup=new ButtonGroup();showAnnotationInfoMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();showAnnotationInfoMenuItem_byClickOut.setText("显示备注");showAnnotationInfoMenuItem_byClickOut.setSelected(true);showAnnotationInfoMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"showAnnotationInfoMenuItem_onClick"));twoButtonGroup.add(showAnnotationInfoMenuItem_byClickOut);showLoveNameInfoMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();twoButtonGroup.add(showLoveNameInfoMenuItem_byClickOut);showLoveNameInfoMenuItem_byClickOut.setText("显示昵称");showLoveNameInfoMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"showLoveNameInfoMenuItem_onClick"));nameInfoShowMenu_byClickOut.add(showAnnotationInfoMenuItem_byClickOut);nameInfoShowMenu_byClickOut.add(showLoveNameInfoMenuItem_byClickOut);columnShowMenu_byClickOut = new SelfDefineJMenu();columnShowMenu_byClickOut.setText("列表显示");this.add(columnShowMenu_byClickOut);ButtonGroup threeButtonGroup = new ButtonGroup();singleShowMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();threeButtonGroup.add(singleShowMenuItem_byClickOut);multiShowMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();threeButtonGroup.add(multiShowMenuItem_byClickOut);singleShowMenuItem_byClickOut.setText("单列显示");singleShowMenuItem_byClickOut.setSelected(true);singleShowMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"singleShowMenuItem_onClick"));columnShowMenu_byClickOut.add(singleShowMenuItem_byClickOut);multiShowMenuItem_byClickOut.setText("多列平铺");multiShowMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"multiShowMenuItem_onClick"));columnShowMenu_byClickOut.add(multiShowMenuItem_byClickOut);columnShowMenu_byClickOut.addSeparator();ShowClearInfoMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();ShowClearInfoMenuItem_byClickOut.setText("显示清爽资料");ShowClearInfoMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"ShowClearInfoMenuItem_onClick"));columnShowMenu_byClickOut.add(ShowClearInfoMenuItem_byClickOut);slideEffectMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();slideEffectMenuItem_byClickOut.setText("滑动效果");slideEffectMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"slideEffectMenuItem_onClick"));columnShowMenu_byClickOut.addSeparator();columnShowMenu_byClickOut.add(slideEffectMenuItem_byClickOut);this.addSeparator();sortShowMenu_byClickOut.setText("排序显示");this.add(sortShowMenu_byClickOut);ButtonGroup fourButtonGroup = new ButtonGroup();sortByIDMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();fourButtonGroup.add(sortByIDMenuItem_byClickOut);sortByUpdateTimeMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();fourButtonGroup.add(sortByUpdateTimeMenuItem_byClickOut);sortByNameMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();fourButtonGroup.add(sortByNameMenuItem_byClickOut);sortByIDMenuItem_byClickOut.setText("按身份标识排序");sortByUpdateTimeMenuItem_byClickOut.setText("按服务更新排序");sortByNameMenuItem_byClickOut.setText("按名称排序");sortShowMenu_byClickOut.add(sortByIDMenuItem_byClickOut);sortShowMenu_byClickOut.add(sortByUpdateTimeMenuItem_byClickOut);sortShowMenu_byClickOut.add(sortByNameMenuItem_byClickOut);this.addSeparator();showOnLinePersonInfoMenuItem_byClickOut = new SelfDefineJMenuItem();showOnLinePersonInfoMenuItem_byClickOut.setText("显示在线联系人");this.add(showOnLinePersonInfoMenuItem_byClickOut);this.addSeparator();showNoKnownPersonGroupInfoMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();showNoKnownPersonGroupInfoMenuItem_byClickOut.setText("显示陌生人分组");showNoKnownPersonGroupInfoMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"showNoKnownPersonGroupInfoMenuItem_onClick"));this.add(showNoKnownPersonGroupInfoMenuItem_byClickOut);showBlockNameListMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();showBlockNameListMenuItem_byClickOut.setText("显示黑名单");showBlockNameListMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"showBlockNameListMenuItem_onClick"));this.add(showBlockNameListMenuItem_byClickOut);}}4、FriendInfoTreeNodeSendMessagePopupMenu类(1)类名称为FriendInfoTreeNodeSendMessagePopupMenu,包名称为com.px1987.imsystem.client.frame.imsystemmainframe.tree,继承于ponent.SelfDefineJPopupMenu_ImageBar类(2)编程该类package com.px1987.imsystem.client.frame.imsystemmainframe.tree;import javax.swing.ImageIcon;import javax.swing.JMenu;import javax.swing.JMenuItem;import ponent.SelfDefineJMenu;import ponent.SelfDefineJMenuItem;import ponent.SelfDefineJPopupMenu_ImageBar;import com.px1987.imsystem.client.frame.IMSystemMainFrame;importcom.px1987.imsystem.client.frame.imsystemmainframe.treeevent.TreeNodeSendMessagePopup Menu_ActionListenerEventHandler;public class FriendInfoTreeNodeSendMessagePopupMenu extends SelfDefineJPopupMenu_ImageBar {private static final long serialVersionUID = 2935447048505581114L;private IMSystemMainFrame oneIMSystemMainFrame=null;private JMenuItem sendIMMessageToSomeOneMenuItem = null;private JMenuItem sendMessageByMobileMenuItem = null;private JMenuItem sendMailMenuItem = null;private JMenuItem sendFilesMenuItem = null;private JMenuItem talkMethodOneMenuItem =null;private JMenuItem talkMethodTwoMenuItem = null;private JMenuItem someOneFriendMenuItem = null;private JMenuItem moveToBlackListMenuItem = null;private JMenuItem deleteSomeOneFriendMenuItem = null;private JMenuItem noticeSomeOneMenuItem = null;private JMenuItem updateNameMenuItem = null;private JMenuItem setupPrivateMenuItem = null;private JMenuItem messageRecordMenuItem = null;private JMenuItem viewInfoMenuItem =null;public FriendInfoTreeNodeSendMessagePopupMenu() {super();}public FriendInfoTreeNodeSendMessagePopupMenu(String label) {super(label);}public FriendInfoTreeNodeSendMessagePopupMenu(String label,IMSystemMainFrame oneIMSystemMainFrame) {super(label);this.oneIMSystemMainFrame=oneIMSystemMainFrame;createThisTreeNodeSendMessagePopupMenu();}public FriendInfoTreeNodeSendMessagePopupMenu(ImageIcon imageIcon) { super(imageIcon);}private void createThisTreeNodeSendMessagePopupMenu(){sendIMMessageToSomeOneMenuItem = new SelfDefineJMenuItem();sendIMMessageToSomeOneMenuItem.setIcon(new ImageIcon(getClass().getResource( "/images/chatFrameImage/popUpMenu/3.jpg")));sendIMMessageToSomeOneMenuItem.setText("发送即时消息");sendIMMessageToSomeOneMenuItem.addActionListener(newTreeNodeSendMessagePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "sendIMMessageToSomeOneMenuItem_onClick"));this.add(sendIMMessageToSomeOneMenuItem);sendMessageByMobileMenuItem = new SelfDefineJMenuItem();sendMessageByMobileMenuItem.setText("发送手机信息");sendMessageByMobileMenuItem.setIcon(new ImageIcon(getClass().getResource("/images/chatFrameImage/popUpMenu/4.jpg")));this.add(sendMessageByMobileMenuItem);sendMailMenuItem = new SelfDefineJMenuItem();sendMailMenuItem.setText("发送电子邮件");this.add(sendMailMenuItem);talkMethodOneMenuItem = new SelfDefineJMenuItem(); talkMethodOneMenuItem.setText("交谈方式一");JMenu talkByVideoMenu = new SelfDefineJMenu();talkByVideoMenu.setText("影音交谈");talkByVideoMenu.add(talkMethodOneMenuItem); talkMethodTwoMenuItem = new SelfDefineJMenuItem(); talkMethodTwoMenuItem.setText("交谈方式二");talkByVideoMenu.add(talkMethodTwoMenuItem);this.add(talkByVideoMenu);sendFilesMenuItem = new SelfDefineJMenuItem();sendFilesMenuItem.setText("发送文件");this.add(sendFilesMenuItem);this.addSeparator();someOneFriendMenuItem = new SelfDefineJMenuItem(); someOneFriendMenuItem.setText("朋友");JMenu removeSomeOneMenu = new SelfDefineJMenu(); removeSomeOneMenu.setText("移动联系人至"); removeSomeOneMenu.setIcon(new ImageIcon(getClass().getResource("/images/chatFrameImage/popUpMenu/5.jpg"))); removeSomeOneMenu.add(someOneFriendMenuItem);this.add(removeSomeOneMenu);moveToBlackListMenuItem = new SelfDefineJMenuItem(); moveToBlackListMenuItem.setText("移至黑名单");this.add(moveToBlackListMenuItem); deleteSomeOneFriendMenuItem = new SelfDefineJMenuItem(); deleteSomeOneFriendMenuItem.setText("删除好友"); deleteSomeOneFriendMenuItem.setIcon(new ImageIcon(getClass().getResource( "/images/chatFrameImage/popUpMenu/6.jpg")));。
J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——构建出客户端项目和共用功能类(第1部分)1.1.1构建出客户端项目和引用第三方系统库文件1、构建出客户端项目SwingGUIIMApp——添加一个Java应用程序项目,项目名称为SwingGUIIMApp2、引用第三方系统库文件(1)引用服务器端的JDIC等系统库文件jdic.jar和jdic_stub.jar包文件(2)引用服务器端的Apache Common HttpClient等系统库文件commons-httpclient-3.1和commons-codec-1.3包文件(3)引用服务器端的Apache Validate等系统库文件commons-validator.jar和jakarta-oro.jar 包文件(4)引用服务器端的利用JDom技术实现的XML解析的系统库文件jdom.jar包文件(5)引用服务器端的利用Common 日志记录处理的功能实现的系统库文件commons-logging.jar包文件1.1.2构建出客户端项目中的共用功能类1、在该项目中添加一个名称为IMSystemException的自定义异常类(1)包名称为com.px1987.imsystem.client.exception,并且从ng.Exception继承(2)代码如下package com.px1987.imsystem.client.exception; public class IMSystemException extends Exception { private static final long serialVersionUID = 1L;public IMSystemException() {}public IMSystemException(String message) {super(message);}public IMSystemException(Throwable cause) {super(cause);}public IMSystemException(String message, Throwable cause) {super(message, cause);}}2、在项目中新建一个存放图像文件的目录images和拷贝图像文件(1)新建一个存放图像文件的目录images(2)然后将客户端程序中所需要的各个图像文件拷贝到对应的文件目录中,最后为下面的状态。