基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——详细设计说明书(第1部分)
- 格式:pdf
- 大小:434.22 KB
- 文档页数:22
1.1应用Eclipse Swing可视化开发实现仿QQ程序的界面(第1部分)1.1.1利用Eclipse Swing可视化开发实现QQ登录主窗口本示例的操作结果如下所示:1、新建一个名称为IMSystem的Java项目2、在该项目中新建QQ登录主窗口(1)选择File>New>Other... ,然后再选择MyEclipse>Swing>Matisse Form,点击Next按钮。
(2)输入包名称为com.px1987.imsystem.frame,类名称为QQLoginMainFrame,并选择Swing JFrame类型点击“Finish”按钮,将进入可视化设计器视图同时也会在项目中自动添加系统库swing-layout-1.0.3.jar和AbsoluteLayout.jar()包文件3、设置QQLoginMainFrame窗口的属性(1)由于需要监控窗口的关闭行为,因此不应该再直接关闭窗口和退出程序因此首先选中主窗口,然后在属性面板中设置defaultCloseOperation项目为DO_NOTHING_ON_CLOSE。
(2)将窗口的标题条属性title项目设置为“QQ登录主窗口”(3)设置窗口内的文字的字体为“宋体”、12号、正常体由于font属性为对象属性项目,因此需要点击最右面的“浏览”按钮,进入自定义对话框中进行设置,如下图所示——在预览中识别是否为中文“宋体”:(4)设置窗口的图标由于iconImage也是对象属性,同样也需要进入自定义对象的对话框,并选择该属性的设置方式为“Custom code”类型——而采用其他方式时的图像文件都是本地磁盘的绝对路径。
然后输入下面黑体形式的代码——下面的代码是创建出一个Image类型的对象实例:java.awt.Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/loginframe/qqicon.jpg"))当然,首先需要在项目中拷贝相关的图像文件,系统最后会自动地产生出下面形式的语句:this.setIconImage(java.awt.Toolkit.Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/loginframe/qqicon.jpg")));(5)设置窗口的背景颜色为[232, 245, 255](6)再设置窗口的如下属性项目this.setResizable(false); //不能改变大小this.setAlwaysOnTop(true); //设置为最顶层的窗口(7)设置窗口的宽度和高度——在源代码窗口中找到下面的代码this.setSize(390, 350);this.setLocationRelativeTo(null); //居中显示4、测试目前的效果(1)由于系统在该类中已经自动添加了main()方法准备好项目中所需要的各种图标图像文件,由于在窗口类中自动添加有main方法,因此可以直接执行。
基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——需求规格说明书1.1.1引言1、项目背景待开发的软件系统为蓝梦教育集团即时通讯系统。
本项目的提出者为蓝梦教育集团高层管理部及系统开发部,开发者为蓝梦教育集团系统开发部,用户为蓝梦教育集团所有员工。
利用企业即时通讯(Instant Messenger,简称IM系统)可以建立一个以自身公司为核心的即时通讯平台,创造新型办公沟通模式,提升办公效率,降低企业通信费用,增强企业内部沟通能力,改善企业与客户之间的沟通渠道——因为公司工作效率很大程度上取决于信息在公司内部流通的速度,以及工作人员彼此之间的熟悉默契程度。
用户可以IM帐号登录,提供即时通讯等方面的功能。
同时该系统的使用可以避免员工使用其他即时通讯系统带来的工作中分散注意力的不良现象。
2、编写目的本软件说明书的目的是挖掘出这个即时通讯系统的全部的需求包括功能上的与非功能的,并对其进行详细的描述。
提供了UML用例图以及详细的用例描述。
需求分析为下一步的软件设计打下基础,也为将来的代码实现提供依据,并且要让项目成员组中的每一个成员知道我们到底要完成的是一个什么样的系统。
这样在以后的步骤中成员之间可以更好的协同高质量的完成任务,本文档的编写为项目开发人员下阶段的设计、开发提供依据,为项目组成员对需求的详尽理解,以及开发过程中协同、高质、高效的工作提供强有力的保证。
此需求说明书也会成为项目验收的依据之一。
3、预期读者本需求说明书面向的读者主要是本项目的全部成员,以及验收人员,将来还会面对系统的维护与升级人员。
4、定义(1)IM企业即时通讯(Instant Messenger),简称IM系统。
(2)客户项目投资方,在此为蓝梦教育集团。
(3)用户产品的最终使用者,在此为蓝梦教育集团的员工。
(4)UIUser Interface 用户界面。
(5)B/SBrowser/Server 浏览器/服务器。
5、参考资料(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、目标某国际化的著名教育企业蓝梦教育集团(Blue Dream Group),为了能够在中国迅速地开展与教育产品和IT技能培训有关的各个方面的业务、并期望能够取得比较好的效益和提高各项教育产品的质量以迎接新的挑战,需要全面地提升本土化的信息化项目建设的进度。
即时消息系统--本科毕业设计收藏摘要随着网络通信技术和计算机技术的进一步发展,即时消息正在成为网络在线活动中不可缺少的业务。
本课题在现有的网络通信技术、数据库技术和编程技术的基础上设计并实现了网络即时消息系统。
该系统采用三层 C/S网络系统构架,采用多线程实现服务器的并发处理,采用 ODBC 接口访问 SQL Server2000数据库设计数据管理模块,采用J2SE 平台和java语言去开发系统。
该系统按照软件工程思想采用面向对象和模块化设计方法设计,其中采用了网络通信技术、数据库技术、多线程技术等计算机技术,实现了网络通信的基本功能,具有通信即时性的特点。
在论文中,我们将会讨论网络即时消息系统的现状和发展,研究实现此系统的技术背景。
然后我们对系统进行需求分析。
按照要求,我们将进行总体设计和详细设计,如服务器端的设计,数据库的设计和客户端的设计。
最后实现系统的配置和使用。
本毕业设计所完成的网络即时消息系统的主要功能如下:1.服务器端:后台启动、监视用户和发送系统消息;2.用户登录和注册;3.好友管理:查找好友、添加好友和删除好友;4.通信:发送消息、接收消息和聊天记录5.上线和隐身。
关键词:即时消息系统,C/S三层结构,TCP/IP, J2SE平台AbstractWith the further development of network communication technology and computer technology, Instant Messaging has been a requirement of on-line activities. This project design and implementation,the instant messaging based on the topic of the existing network communication technology, database technology and programming technology.This system uses composite structure of three-tier C/S to design system architecture, uses multi-threading to implement server’s parallel processing, uses ODBC interface to access to SQL Server database to design data management module, uses J2SE(Java 2 Standard Edition) and Object-oriented programming language ,java,to develop the system.This system is designed by object-oriented and modular design method, which used computer technologies based on network communication technology, database technology, Multi-threading technology, software reuse and so on, this system has basic functions of network communication, , and has features of instant.In my dissertation,we will discuss the status and development of network instant messenger,and research in the relevant technology background.After that we will analyse the requirement of the system. With the requirement analysis,we will make the general design and detailed design,such as server design ,database design and client design.In the last part ,we will implement the system and put it into practice.The system has completed the following major functions:1.Server:Startup,surveillance and send systemic message.;2.User management: registration login and logout;3.Friend management: find ,add and delete;4.Communication:sending message,receriving message and receiving system message;5.Online and hide.Key Words:Instant Messenger,C/S Three-layer Construction, TCP/IP,J2SE Platform目录摘要Abstract目录第一章绪论1.1选题背景1.1.1 即时消息系统的研究现状1.1.2 即时消息系统的发展趋势1.1.3论文研究的主要内容1.2 技术背景1.2.1 C/S 模型1.2.2 TCP/IP 协议1.2.3编程技术第二章系统分析与设计2.1 需求分析2.2系统总体框架2.2.1总体设计2.2.2功能模块2.3系统详细设计2.3.1多线程设计2.3.2数据库设计2.3.3服务器的设计2.3.4客户端的设计2.3.5消息通信的设计第三章系统实现3.1数据库部署3.1.1建立数据库3.1.2 配置ODBC数据源3.2 开发环境3.2.1 构建Java SE平台3.2.2 安装开发工具 eclipse3.3 服务器端的实现3.3.1 启动服务器后台3.3.3 发送系统消息3.4 客户端的实现3.4.1 用户注册3.4.2 登录3.4.3程序主界面3.4.3 添加好友3.4.4 上线与隐身3.4.5 聊天通信第四章总结参考文献致谢。
J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——构建出服务器端项目(第1/4部分)1.1.1构建出服务器端项目1、新建服务器端项目IMServerWebApp(1)项目名为IMServerWebApp,Context名称为/webimapp,并且选择J2EE的版本为J2EE5.0(2)将出现下面的结果2、在Web项目中添加JSTL标签库jstl.jar和standard.jar3、Commons-HTTPClient组件及有关的系统库文件Commons-httpclient-3.1.jar、commons-codec-1.3.jar和commons-logging.jar等系统库文件4、XML解析技术的系统库jdom5、添加与JDIC系统包有关的各个文件(1)与Java有关的系统类:jdic.jar和jdic_stub.jar(2)针对Windows系统平台下的系统库jdic.dll和tray.dll文件jdic.dll和tray.dll是针对Windows系统平台中的本地系统库,它们都要放在C:\\Windows 目录(Windows 2003操作系统)或者C:\\WINNT目录(Windows 2000操作系统)中。
这些文件包含jdic.jar 的Java 方法和本机操作系统方法之间的“桥接”方法。
(3)JDIC中的浏览器组件JDIC允许把用户主机中默认的Web浏览器嵌入到Java Swing的应用程序中,并且浏览器组件的API允许程序员在程序中编程浏览器的各种事件以及实现对历史记录的控制(向前、后退、刷新)等功能。
为此,需要将IeEmbed.exe或者MozEmbed.exe放到本地操作系统的工作目录中。
浏览器组件将立刻使用本机操作系统中的默认Web浏览器——它们通常是Internet Explorer或Mozilla等,但需要将JDIC系统库中的IeEmbed.exe或者MozEmbed.exe程序拷贝到本地操作系统的工作目录中——对于Windows系统则为C:\\Windows目录(Windows 2003操作系统)或者C:\\WINNT目录(Windows 2000操作系统)中。
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")));。
仿QQ系统需求规则说明书班级:信工11201姓名:吴义高学号:201205950目录第1章引言 (2)1.1 目标与功能 (3)1.2 系统概述 ................................................... . (3)1.3 约束条件 (3)第2章信息描述 (3)2.1 信息流 ..................................................... (3)2.2 对象描述 .................................................. . (5)2.3 数据关系 .................................................. .. (5)2、4 数据字典 (5)第3章功能描述 (7)3、1 处理说明 (7)3、2 性能说明 (8)第4章开发环境与开发工具 (8)4、1 开发环境 (8)4、2 开发工具 (8)第1章引言1.1 目标与功能局域网仿Q聊天工具是仿照腾讯QQ的主要功能设计,它主要针对当今社会节奏生活,主要特点包含通用性即在每个局域网内可以运行,系统具有较高的可移植性和使用性、也包含实用性各及时性,但系统双方的交流可以在短期内进行,以达到最快速度。
该项目主要功能包括:1、注册账号 2、登陆 3、个人信息管理 4、聊天处理 5、查找增加好友管理 6、群管理 7、聊天记录管理1.2 系统概述从技术上讲,系统就是采用当前先进的开发技术, 以客户机/服务器体系结构为系统基本框架的,基于VC++技术机制中基于SOCKET的局域网通信,以事务处理为核心的,具有开放性和正确性、健壮性、高效性、安全性、简捷性.它可以运行在各种使用TCP/IP协议作为通讯协议的网络上。
而在SOCKET API的帮助下,开发基于SOCKET的局域网通信软件也是易于实现的。
《J2EE系统架构和程序设计》课程设计实训项目——基于Struts2 +Spring +Hibernate架构的销售与服务管理系统需求规格说明书引言1、编写目的此需求分析报告是为客户资料信息分析系统而编写的。
该系统主要是通过对客户详细资料的深入分析,来提高客户满意程度,进而提高企业竞争力的信息分析系统。
此需求分析报告旨在明确该客户资料信息分析系统的要求和细节,给开发人员了解需求实现的难度和困难,最终提供给正方商业集团讨论和审核,达到沟通效果。
本需求说明书系统地阐述正方商业集团销售支持与服务管理子系统的基本功能和性能说明,以便于编码人员能够正确地编写代码,明确系统开发方向,高质量完成项目。
2、预期读者编码人员,供应商群,客户群以及管理人员。
3、项目背景国内著名的正方商业集团(Square Business Group),为了能够在国内迅速地开展连锁加盟机构以扩大其某种产品的商业销售渠道,急需开发出一套适合本企业经营和管理要求的客户关系管理(CRM,Customer Relationship Management)系统。
正方商业集团的高层管理人员期望该客户关系管理系统能够以“客户”为中心,将本集团下属的各个企业的市场、销售和服务等能够有机地整合起来,并形成跨部门的统一业务管理的平台,使其所销售的产品能够更好地满足客户的需要。
4、术语定义(1)CRM:Customer Relationship Management,客户关系管理系统。
(2)客户:指购买正方商业集团产品并注册的用户。
(3)管理员:正方商业集团的内部职员(4)游客:系统的未注册用户5、参考资料(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、目标在电子商务腾飞的时代,高素质高效率的生活也逐渐成为人们追求的新目标,时间的充分利用以及信息社会的高度发达,网络也成为了最大的信息交换平台。
基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——系统业务处理和数据访问层组件的单元测试说明书1.1.1引言1、编写目的本测试报告为本即时通讯项目的测试报告,目的在于总结测试阶段的测试以及分析测试结果,描述系统是否符合用户需求说明书。
预期参考人员包括用户、测试人员、开发人员和项目管理者。
2、项目背景本产品是为本实训项目开发小组开发的即时通讯项目。
本产品依据腾讯QQ基础模型开发,形成一个以文字聊天为核心,以文件传输、邮件通讯和语音聊天支持的即时通讯工具。
主要功能是实现用户与在线好友的聊天、文件传输以及相关的操作功能。
3、系统简介本即时通讯是由实训项目开发小组开发的一款基于Internet的即时通信(IM)软件,该软件支持在线聊天、语音聊天、点对点传输文件、发送邮件等多种功能。
4、测试概要说明(1)测试用例设计本次测试用例设计主要采用黑盒测试方法,功能模块及集成测试采用的具体方法有等价类划分、边界值划分等。
在系统测试时依据业务流程采用回归测试。
(2)测试方法主要是黑盒测试,测试的重点集中在业务流程、数据提取和各功能模块间的接口。
其中单元测试由开发人员直接完成;功能模块采用黑盒测试的常用方法;集成测试模块主要偏重系统的接口和数据提取方面;系统测试主要体现在业务流程的测试,主要采用回归测试。
5、测试覆盖1.1.2系统业务层单元测试1、测试目的对业务层的各个组件进行测试,确保业务逻辑的正确性。
查找隐藏的性能问题,给以后提升性能提供指导。
2、新用户注册模块单元测试(1)测试内容1)用户表单输入数据完整性校验。
包括非空,合法字符,密码与重复输入密码的相同性。
2)校验码的刷新和校验码输入验证。
3)自动添加用户的ID存储在数据库中。
用户ID为UserInfo表的primary key。
4)自动添加用户的Account(用户账号)到数据库中,并在页面返回,提示给用户。
Account供用户在登录页面的账号使用。
J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——构建出服务器端项目(第2/4部分)5、利用SAX技术实现的对系统中的公告信息的XML文件进行解析的功能实现(1)XMLInformationConfig接口,包名称为com.px1987.imsystem.server.xmlparse.interpackage com.px1987.imsystem.server.xmlparse.inter;import com.px1987.imsystem.server.exception.IMSystemException;public interface XMLInformationConfig {public void xmlInit(String configFilePathAndName) throws IMSystemException;}(2)该接口的实现类SAXInformationConfig,并且继承于org.xml.sax.helpers.DefaultHandler 类(3)编程该类中的功能实现代码package com.px1987.imsystem.server.xmlparse.imple;import java.io.File;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;import com.px1987.imsystem.server.exception.IMSystemException;import com.px1987.imsystem.server.xmlparse.inter.XMLInformationConfig;public class SAXInformationConfig extends DefaultHandler implements XMLInformationConfig{private String marqueeText = "";public String getMarqueeText(){return marqueeText;}public SAXInformationConfig(){}/*** 读取配置文件信息,并设置相关参数。
基于JAVA的仿QQ聊天系统的设计李丹;张师毅【摘要】以 JAVA 技术为核心,利用计算机局域网通信机制原理(例如 TCP/IP 协议、客户端/服务器端模式( C/S 模式)、网络编程设计方法等)完成了一款适合局域网的仿 QQ 聊天系统。
该系统主要由一个聊天服务器端程序和一个聊天客户端程序两块组成。
前者通过 Socket 套接字建立服务器,服务器能读取、转发客户端发来的信息,并能刷新用户列表;后者通过与服务器建立连接来进行客户端与客户端的信息交流。
经测试,系统工作性能稳定,基本能达到聊天功能,并实现了部分附加功能。
%Based on the JAVA technology , this paper uses some techniques of computer local area network communication , such asTCP/IP protocol , client/server model ( C/S ) and network designing method , to complete an imitation QQ chat system suitable for LAN . The system is mainly composed of a chat server program and a chat client program . Through the Socket , the former es-tablishes the server which can read , forward the information to the client , and refresh the list of users . The latter can get a con-nection with the server and then the exchange of information can be made from the client to the client . After testing , the system performance becomes stable , which can achieve the chat function and realized some additional functions .【期刊名称】《微型机与应用》【年(卷),期】2013(000)024【总页数】3页(P11-13)【关键词】即时通信;通信协议;Socket;多线程【作者】李丹;张师毅【作者单位】温州医科大学附属眼视光医院信息中心,浙江温州 325027; 厦门大学软件学院,福建厦门 361005;温州医科大学附属眼视光医院信息中心,浙江温州 325027【正文语种】中文【中图分类】TP311.1随着计算机网络技术的发展,网络聊天工具已经成为人们日常交流的一种重要工具。
J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——完善客户端聊天信息主窗口程序类(第2部分)1.1.1熟悉了解JTextPane类1、JEditorPane和JTextPane类JEditorPane可以显示HTML和RTF文档,而且它还将激活另一种事件,即HyperlinkEvent。
当鼠标进入、离开或点击一个超链接时,就会激活此事件的子类型事件。
而JTextPane是JEditorPane的子类,它无所不能,可以在同一个组件中显示多种字体和多种样式,还提供对光标(插入记号)、加亮、嵌入图像和其它高级特性的支持。
2、在JTextPane中常用到属性类SimpleAttributeSet和StyleConstant(1)SimpleAttributeSet类属性的变化原本是利用AttributeSet接口来处理的,但是这个接口中包含了太多的方法,若是我们直接实现AttributeSet接口那就需要实作此接口中的所有的方法,这对编写程序来说并不是一个很理想的做法。
而java另外提供了SimpleAttributeSet类,实现了AttributeSet接口。
因此,只要我们直接使用SimpleAttributeSet类就能具备AttributeSet接口的所有功能,而不用一个个的编写AttributeSet中的方法。
(2)StyleConstant类StyleConstant类则是提供AttributeSet类许多常用的属性键值(Attribute Key)和方法来设置或取得JTextPane内容的状态。
在StyleConstant类中包含了许多的常用的属性设置,包括本文与边界空白区段设置、文字字体/大小/类型设置、背景颜色设置等。
SimpleAttributeSet属性集需要利用StyleConstants类中的静态方法来处理。
例如,要创建一组指定红色的属性,可采用如下做法:SimpleAttributeSet redstyle = new SimpleAttributeSet();StyleConstants.setForeground(redstyle, Color.red);为了向文档中增加一些红色的文本,只需将文本和属性传递给文档的insertString()方法,如下所示:document.insertString(6,"Some red text", redstyle):insertString的第一个实参是文本的偏移量。
存档编号_______基于Java的仿QQ聊天系统的设计与实现目录内容摘要: (1)关键字: (1)Abstract: (1)Key words: (1)1. 引言 (2)2. 系统分析 (2)2.1可行性分析 (2)2.2需求分析 (3)3. 总体设计 (11)3.1功能模块图 (11)3.2数据库设计 (12)3.3类图 (18)4. 详细设计及实现 (19)4.1界面设计 (19)4.2数据输入输出设计 (23)4.3代码实现 (24)5 系统测试 (31)5.1注册测试 (31)5.2登陆测试 (31)5.3私聊测试 (32)5.4群聊测试 (33)5.5文件传输测试 (34)6 总结 (35)参考文献 (37)内容摘要:计算机网络的迅速发展,对人类社会诸多领域产生了巨大的影响。
尤其是,随着信息时代的来临,人们之间愈来愈趋向于通过网络来交流和传递信息。
而聊天系统正是当前人们使用最多的中介。
在这个平台上,许多认识或不认识的人们彼此间能够随意的相互交流。
因此,开发和架构这种平台符合时代发展的需要。
本系统在开发中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。
开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。
在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。
关键字:Socket;服务器端;客户端;连接(connection)Abstract:The rapid development of the computer networks has been making a great influence in many fields of human society.In particular, along with information age approaching, between the people tend to increasingly in exchanges and the transmission information through the network. But chats the system is precisely the current people uses many intermediary,。
J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——完善消息管理主窗口功能实现程序类1.1.1完善消息管理主窗口类中的各个事件类1、MessageManageMainFrame_ActionListenerEventHandler类(1)类名称为MessageManageMainFrame_ActionListenerEventHandler,包名称为com.px1987.imsystem.client.frame.messagemanageframe.event,实现java.awt.event.ActionListener接口(2)编程该类package com.px1987.imsystem.client.frame.messagemanageframe.event;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import ng.reflect.InvocationTargetException;import ng.reflect.Method;import com.px1987.imsystem.client.frame.MessageManageMainFrame;public class MessageManageMainFrame_ActionListenerEventHandler implements ActionListener {private MessageManageMainFrame eventSourceContainer = null;public MessageManageMainFrame getEventSourceContainer() {return eventSourceContainer;}public void setEventSourceContainer(MessageManageMainFrame eventSourceContainer) { this.eventSourceContainer = eventSourceContainer;}private String eventHandlerMethodName = null;public MessageManageMainFrame_ActionListenerEventHandler() {super();}publicMessageManageMainFrame_ActionListenerEventHandler(MessageManageMainFrame eventSourceContainer,String eventHandlerMethodName) {super();this.eventSourceContainer = eventSourceContainer;this.eventHandlerMethodName = eventHandlerMethodName;}@SuppressWarnings("unchecked")public void actionPerformed(ActionEvent actionEventObject) {Class currentEventHandlerClass = this.getClass();Method eventHandlerMmethod = null;try { //获得事件处理方法eventHandlerMmethod = currentEventHandlerClass.getMethod(this.eventHandlerMethodName, new Class[] {actionEventObject.getClass()});} catch (SecurityException exception) {exception.printStackTrace();System.out.println("出现了SecurityException异常错误,错误信息为:" +exception.getMessage());} catch (NoSuchMethodException exception) {exception.printStackTrace();System.out.println("出现了NoSuchMethodException异常错误,错误信息为:" + exception.getMessage());}try { //调用指定的事件处理方法eventHandlerMmethod.invoke(this, new Object[] {actionEventObject});} catch (InvocationTargetException exception) {exception.printStackTrace();System.out.println("出现了InvocationTargetException异常错误,错误信息为:" + exception.getMessage());} catch (IllegalArgumentException exception) {exception.printStackTrace();System.out.println("出现了IllegalArgumentException异常错误,错误信息为:" + exception.getMessage());} catch (IllegalAccessException exception) {exception.printStackTrace();System.out.println("出现了IllegalAccessException异常错误,错误信息为:" +exception.getMessage());}}public void someOnePageJTextField_onClick(ActionEvent e) {}}2、MessageManageMainFrame_MouseListener_MouseClickedEventHandler类(1)类名称为MessageManageMainFrame_MouseListener_MouseClickedEventHandler,包名称为com.px1987.imsystem.client.frame.messagemanageframe.event,继承于java.awt.event.MouseAdapter类(2)编程该类package com.px1987.imsystem.client.frame.messagemanageframe.event;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import ng.reflect.InvocationTargetException;import ng.reflect.Method;import com.px1987.imsystem.client.frame.MessageManageMainFrame;public class MessageManageMainFrame_MouseListener_MouseClickedEventHandler extends MouseAdapter {private MessageManageMainFrame eventSourceContainer = null;public MessageManageMainFrame getEventSourceContainer() {return eventSourceContainer;}public void setEventSourceContainer(MessageManageMainFrame eventSourceContainer) { this.eventSourceContainer = eventSourceContainer;}private String eventHandlerMethodName = null;public MessageManageMainFrame_MouseListener_MouseClickedEventHandler() { super();}public MessageManageMainFrame_MouseListener_MouseClickedEventHandler( MessageManageMainFrameeventSourceContainer,String eventHandlerMethodName) {super();this.eventSourceContainer = eventSourceContainer;this.eventHandlerMethodName = eventHandlerMethodName;}public void mouseClicked(MouseEvent mouseEventObject) {mouseEventDelegate(mouseEventObject);}@SuppressWarnings("unchecked")public void mouseEventDelegate(MouseEvent mouseEventObject) {Class currentEventHandlerClass = this.getClass();Method eventHandlerMmethod = null;try { //获得事件处理方法eventHandlerMmethod = currentEventHandlerClass.getMethod(this.eventHandlerMethodName, new Class[] {mouseEventObject.getClass()});} catch (SecurityException exception) {exception.printStackTrace();System.out.println("出现了SecurityException异常错误,错误信息为:" +exception.getMessage());} catch (NoSuchMethodException exception) {exception.printStackTrace();System.out.println("出现了NoSuchMethodException异常错误,错误信息为:" + exception.getMessage());}try { //调用指定的事件处理方法eventHandlerMmethod.invoke(this, new Object[] {mouseEventObject});} catch (InvocationTargetException exception) {exception.printStackTrace();System.out.println("出现了InvocationTargetException异常错误,错误信息为:" + exception.getMessage());} catch (IllegalArgumentException exception) {exception.printStackTrace();System.out.println("出现了IllegalArgumentException异常错误,错误信息为:" + exception.getMessage());} catch (IllegalAccessException exception) {exception.printStackTrace();System.out.println("出现了IllegalAccessException异常错误,错误信息为:" + exception.getMessage());}}public void pullDownImageLabel_mouseClicked(MouseEvent e) {}public void deleteImageLabel_mouseClicked(MouseEvent e) {}public void refreshImageLabel_mouseClicked(MouseEvent e) {}public void positionLabel_mouseClicked(MouseEvent e) {}public void imfindImageLabel_mouseClicked(MouseEvent e) {}public void firstPageLabel_mouseClicked(MouseEvent e) {}public void previousPageLabel_mouseClicked(MouseEvent e) {}public void nextPageLabel_mouseClicked(MouseEvent e) {}public void lastPageLabel_mouseClicked(MouseEvent e) {}public void returnImageLabel_mouseClicked(MouseEvent e) {}}3、MessageManageMainFrame_WindowListener_WindowClosingEventHandler类(1)类名称为MessageManageMainFrame_WindowListener_WindowClosingEventHandler,包名称为com.px1987.imsystem.client.frame.messagemanageframe.event,继承于java.awt.event.WindowAdapter类(2)编程该类package com.px1987.imsystem.client.frame.messagemanageframe.event;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import ng.reflect.InvocationTargetException;import ng.reflect.Method;import com.px1987.imsystem.client.frame.MessageManageMainFrame;import com.px1987.imsystem.client.util.HttpClient_JDICUtils;public class MessageManageMainFrame_WindowListener_WindowClosingEventHandler extends WindowAdapter {private MessageManageMainFrame eventSourceContainer = null;private String eventHandlerMethodName = null;public MessageManageMainFrame_WindowListener_WindowClosingEventHandler() { super();}publicMessageManageMainFrame_WindowListener_WindowClosingEventHandler(MessageManageM ainFrameeventSourceContainer,String eventHandlerMethodName) {super();this.eventSourceContainer = eventSourceContainer;this.eventHandlerMethodName = eventHandlerMethodName;}public void windowClosing(WindowEvent windowEventObject) {windowEventDelegate(windowEventObject);}@SuppressWarnings("unchecked")public void windowEventDelegate(WindowEvent windowEventObject) {Class currentEventHandlerClass = this.getClass();Method eventHandlerMmethod = null;try { //获得事件处理方法eventHandlerMmethod = currentEventHandlerClass.getMethod(this.eventHandlerMethodName, new Class[] {windowEventObject.getClass()});} catch (SecurityException exception) {exception.printStackTrace();System.out.println("出现了SecurityException异常错误,错误信息为:" +exception.getMessage());} catch (NoSuchMethodException exception) {exception.printStackTrace();System.out.println("出现了NoSuchMethodException异常错误,错误信息为:" + exception.getMessage());}try { //调用指定的事件处理方法eventHandlerMmethod.invoke(this, new Object[] {windowEventObject});} catch (InvocationTargetException exception) {exception.printStackTrace();System.out.println("出现了InvocationTargetException异常错误,错误信息为:" +exception.getMessage());} catch (IllegalArgumentException exception) {exception.printStackTrace();System.out.println("出现了IllegalArgumentException异常错误,错误信息为:" + exception.getMessage());} catch (IllegalAccessException exception) {exception.printStackTrace();System.out.println("出现了IllegalAccessException异常错误,错误信息为:" +exception.getMessage());}}public void this_windowClosing(WindowEvent e) {eventSourceContainer.getOneIMSystemMainFrame().setLocationRelativeTo(null); // 将系统主窗口重新定位到屏幕的中间HttpClient_JDICUtils.setIsMessageManageMainFrame_Show(false);eventSourceContainer.dispose(); //仅关闭主窗口、但不退出系统程序}}1.1.2完善消息管理主窗口类中的各个子面板类1、UpNorthToolBarButtonPanel类(1)类名称为UpNorthToolBarButtonPanel,包名称为com.px1987.imsystem.client.frame.messagemanageframe,继承于javax.swing.JPanel类(2)编程该类package com.px1987.imsystem.client.frame.messagemanageframe;import java.awt.Cursor;import java.awt.FlowLayout;import youtManager;import java.util.Enumeration;import javax.swing.ImageIcon;import javax.swing.JComboBox;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTree;import javax.swing.tree.TreeNode;import com.px1987.imsystem.client.frame.MessageManageMainFrame;importcom.px1987.imsystem.client.frame.messagemanageframe.event.MessageManageMainFrame_Mo useListener_MouseClickedEventHandler;import com.px1987.imsystem.client.util.IMSystemClientUtils;public class UpNorthToolBarButtonPanel extends JPanel {private static final long serialVersionUID = -7546540651613297087L;private JLabel inandOutImageabel =null;private JLabel pullDownImageLabel =null;private JLabel deleteImageLabel = null;private JLabel refreshImageLabel =null;private JLabel positionLabel =null;private JLabel findRangeLabel =null;private JComboBox allGroupNameComboBox = null;private JLabel findContentLabel = null;private JComboBox findContentComboBox =null;private JLabel imfindImageLabel = null;private MessageManageMainFrame oneMessageManageMainFrame=null;public MessageManageMainFrame getOneMessageManageMainFrame() {return oneMessageManageMainFrame;}public void setOneMessageManageMainFrame(MessageManageMainFrame oneMessageManageMainFrame) {this.oneMessageManageMainFrame = oneMessageManageMainFrame;}public UpNorthToolBarButtonPanel() {super();createThisToolBarButtonPanel();}public UpNorthToolBarButtonPanel(MessageManageMainFrame oneMessageManageMainFrame) {super();this.oneMessageManageMainFrame=oneMessageManageMainFrame;createThisToolBarButtonPanel();}public UpNorthToolBarButtonPanel(LayoutManager layout) {super(layout);createThisToolBarButtonPanel();}public UpNorthToolBarButtonPanel(boolean isDoubleBuffered) {super(isDoubleBuffered);createThisToolBarButtonPanel();}public UpNorthToolBarButtonPanel(LayoutManager layout,boolean isDoubleBuffered) {super(layout, isDoubleBuffered);createThisToolBarButtonPanel();}private void createThisToolBarButtonPanel(){initThisToolBarButtonPanel();createAllButtons_InToolbar();}private void initThisToolBarButtonPanel(){FlowLayout flowLayout1 = new FlowLayout();flowLayout1.setAlignment(FlowLayout.LEFT);this.setLayout(flowLayout1);this.setBackground(IMSystemClientUtils.getNoSerializableVOInstance().getLoginFormBgColor());}@SuppressWarnings("unchecked")private void createAllButtons_InToolbar(){inandOutImageabel = new JLabel();inandOutImageabel.setIcon(new ImageIcon(getClass().getResource("/images/messageManageFrame/inout.jpg")));inandOutImageabel.setText("导入和导出");this.add(inandOutImageabel);pullDownImageLabel = new JLabel();pullDownImageLabel.setIcon(new ImageIcon(getClass().getResource("/images/messageManageFrame/pulldown.jpg")));pullDownImageLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); //改变鼠标形状pullDownImageLabel.addMouseListener(newMessageManageMainFrame_MouseListener_MouseClickedEventHandler(oneMessageManageM ainFrame,"pullDownImageLabel_mouseClicked"));this.add(pullDownImageLabel);deleteImageLabel = new JLabel();deleteImageLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); //改变鼠标形状deleteImageLabel.addMouseListener(newMessageManageMainFrame_MouseListener_MouseClickedEventHandler(oneMessageManageM ainFrame,"deleteImageLabel_mouseClicked"));deleteImageLabel.setIcon(new ImageIcon(getClass().getResource("/images/messageManageFrame/delete.jpg")));this.add(deleteImageLabel);refreshImageLabel = new JLabel();refreshImageLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); //改变鼠标形状refreshImageLabel.addMouseListener(newMessageManageMainFrame_MouseListener_MouseClickedEventHandler(oneMessageManageM ainFrame,"refreshImageLabel_mouseClicked"));refreshImageLabel.setIcon(new ImageIcon(getClass().getResource("/images/messageManageFrame/refresh.jpg")));this.add(refreshImageLabel);positionLabel = new JLabel();positionLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); //改变鼠标形状positionLabel.addMouseListener(newMessageManageMainFrame_MouseListener_MouseClickedEventHandler(oneMessageManageM ainFrame,"positionLabel_mouseClicked"));positionLabel.setIcon(new ImageIcon(getClass().getResource("/images/messageManageFrame/position.jpg")));this.add(positionLabel);findRangeLabel = new JLabel();findRangeLabel.setText("查找范围:");this.add(findRangeLabel);//下面的代码是动态地获得系统主窗口中的消息树中的第一级节点的名称,然后再添加到allGroupNameComboBox中allGroupNameComboBox = new JComboBox();allGroupNameComboBox.addItem("所有分组");JTree centerJTree =oneMessageManageMainFrame.getOneIMSystemMainFrame().getCenterTreeScrollPanel().get CenterInfoTree();TreeNode root = (TreeNode) centerJTree.getModel().getRoot();for (Enumeration<TreeNode> e = root.children(); e.hasMoreElements(); ) {TreeNode someOneChildTreeNode = (TreeNode) e.nextElement();allGroupNameComboBox.addItem(someOneChildTreeNode.toString()); //获得某个节点的名称并添加到allGroupNameComboBox中}this.add(allGroupNameComboBox);findContentLabel = new JLabel();findContentLabel.setText("查找内容:");findContentComboBox = new JComboBox();findContentComboBox.setEditable(true);this.add(findContentLabel);this.add(findContentComboBox);imfindImageLabel = new JLabel();imfindImageLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); //改变鼠标形状imfindImageLabel.addMouseListener(newMessageManageMainFrame_MouseListener_MouseClickedEventHandler(oneMessageManageM ainFrame,"imfindImageLabel_mouseClicked"));imfindImageLabel.setIcon(new ImageIcon(getClass().getResource("/images/messageManageFrame/imFind.jpg")));imfindImageLabel.setText("立即查找");this.add(imfindImageLabel);}}2、LeftTreeMenuPanel类(1)类名称为LeftTreeMenuPanel,包名称为com.px1987.imsystem.client.frame.messagemanageframe,继承于javax.swing.JPanel类(2)编程该类package com.px1987.imsystem.client.frame.messagemanageframe; import java.awt.BorderLayout;import java.awt.Color;import java.awt.FlowLayout;import java.awt.Font;import youtManager;import javax.swing.ImageIcon;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTree;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeCellRenderer;import javax.swing.tree.MutableTreeNode;import com.px1987.imsystem.client.frame.MessageManageMainFrame;import com.px1987.imsystem.client.util.IMSystemClientUtils;public class LeftTreeMenuPanel extends JPanel {private static final long serialVersionUID = 9062656015695314552L;private JTree allGroupNameTree = null;private MessageManageMainFrame oneMessageManageMainFrame=null;private JScrollPane leftTreeScrollPane =null;public LeftTreeMenuPanel() {super();}public LeftTreeMenuPanel(MessageManageMainFrame oneMessageManageMainFrame) { super();this.oneMessageManageMainFrame=oneMessageManageMainFrame;creatAllGroupNameInfoTreeAndSetUpProperty();ceateThisLeftTreeMenuPanel();}public LeftTreeMenuPanel(LayoutManager layout) {super(layout);}public LeftTreeMenuPanel(boolean isDoubleBuffered) {super(isDoubleBuffered);}public LeftTreeMenuPanel(LayoutManager layout, boolean isDoubleBuffered) { super(layout, isDoubleBuffered);}/** 下面的creatAllGroupNameInfoTreeAndSetUpProperty方法是创建窗口左面的树形菜单*/public void creatAllGroupNameInfoTreeAndSetUpProperty() {DefaultMutableTreeNode allGroupNameInfoRoot = newDefaultMutableTreeNode(""); //由于不需要显示出树的根节点,因此不给出根节点的名称DefaultMutableTreeNode firstLevelTreeNode_allGroupName = newDefaultMutableTreeNode("所有分组");/** 下面的代码是获得系统主窗口中的中间消息树中的各个节点,然后再添加到“所有分组”的节点中*/JTree centerJTree =oneMessageManageMainFrame.getOneIMSystemMainFrame().getCenterTreeScrollPanel().get CenterInfoTree();MutableTreeNode centerJTree_RootNode = (MutableTreeNode) centerJTree.getModel().getRoot();firstLevelTreeNode_allGroupName.add(centerJTree_RootNode);DefaultMutableTreeNode firstLevelTreeNode_groupList = newDefaultMutableTreeNode("群列表");DefaultMutableTreeNode firstLevelTreeNode_groupList_one = newDefaultMutableTreeNode("");firstLevelTreeNode_groupList.add(firstLevelTreeNode_groupList_one);DefaultMutableTreeNode firstLevelTreeNode_mobileContacter = newDefaultMutableTreeNode("手机联系人");DefaultMutableTreeNode firstLevelTreeNode_mobileContacter_one = newDefaultMutableTreeNode("");firstLevelTreeNode_mobileContacter.add(firstLevelTreeNode_mobileContacter_one);DefaultMutableTreeNode firstLevelTreeNode_researchGroup = newDefaultMutableTreeNode("讨论组");DefaultMutableTreeNode firstLevelTreeNode_researchGroup_one = newDefaultMutableTreeNode("");firstLevelTreeNode_researchGroup.add(firstLevelTreeNode_researchGroup_one); DefaultMutableTreeNode firstLevelTreeNode_tempSession = new DefaultMutableTreeNode("临时会话");DefaultMutableTreeNode firstLevelTreeNode_tempSession_one = new DefaultMutableTreeNode("");firstLevelTreeNode_tempSession.add(firstLevelTreeNode_tempSession_one); DefaultMutableTreeNode firstLevelTreeNode_systemMessage = new DefaultMutableTreeNode("系统消息");DefaultMutableTreeNode boastMessageNode = new DefaultMutableTreeNode("广播消息");DefaultMutableTreeNode groupMessageNode = new DefaultMutableTreeNode("群系统消息");DefaultMutableTreeNode validatorMessageNode = new DefaultMutableTreeNode("验证消息");DefaultMutableTreeNode saleGoodsMessageNode = new DefaultMutableTreeNode("营销消息");firstLevelTreeNode_systemMessage.add(boastMessageNode); firstLevelTreeNode_systemMessage.add(groupMessageNode); firstLevelTreeNode_systemMessage.add(validatorMessageNode); firstLevelTreeNode_systemMessage.add(saleGoodsMessageNode); allGroupNameInfoRoot.add(firstLevelTreeNode_allGroupName); allGroupNameInfoRoot.add(firstLevelTreeNode_groupList); allGroupNameInfoRoot.add(firstLevelTreeNode_mobileContacter); allGroupNameInfoRoot.add(firstLevelTreeNode_researchGroup); allGroupNameInfoRoot.add(firstLevelTreeNode_tempSession); allGroupNameInfoRoot.add(firstLevelTreeNode_systemMessage);//下面的代码是对树进行各种形式的属性设置allGroupNameTree = new JTree(allGroupNameInfoRoot); allGroupNameTree.setRootVisible(false); //屏蔽不显示根节点allGroupNameTree.putClientProperty("JTree.lineStyle", "Angled"); //使其具有直角连线allGroupNameTree.putClientProperty("JTree.lineStyle", "Horizontal"); //使树的文件夹间具有水平分隔线DefaultTreeCellRenderer cellRenderer = (DefaultTreeCellRenderer)allGroupNameTree.getCellRenderer();cellRenderer.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));cellRenderer.setOpenIcon(new ImageIcon(getClass().getResource("/images/treePopMenu/open.gif"))); //设置打开状态的图cellRenderer.setClosedIcon(new ImageIcon(getClass().getResource("/images/treePopMenu/close.gif"))); //设置关闭状态的图cellRenderer.setLeafIcon(new ImageIcon(getClass().getResource("/images/treePopMenu/file.jpg"))); //设置树中叶节点的图leftTreeScrollPane =new JScrollPane();cellRenderer.setBackgroundNonSelectionColor(leftTreeScrollPane.getBackground()); //设置节点选中或者未选中的颜色cellRenderer.setBackgroundSelectionColor(Color.yellow);cellRenderer.setBorderSelectionColor(Color.red);cellRenderer.setTextNonSelectionColor(Color.black);cellRenderer.setTextSelectionColor(Color.blue);}private void ceateThisLeftTreeMenuPanel(){this.setLayout(new BorderLayout());JLabel messageGroupLabel = new JLabel();messageGroupLabel.setText("消息分组");FlowLayout flowLayout2 = new FlowLayout();flowLayout2.setAlignment(FlowLayout.LEFT);JPanel leftUpLabelPanel = new JPanel();leftUpLabelPanel.setLayout(flowLayout2);leftUpLabelPanel.setBackground(IMSystemClientUtils.getNoSerializableVOInstance().getLoginButtonBgColor());leftUpLabelPanel.add(messageGroupLabel);this.add(leftUpLabelPanel, java.awt.BorderLayout.NORTH);leftTreeScrollPane.getViewport().add(allGroupNameTree);this.add(leftTreeScrollPane, java.awt.BorderLayout.CENTER);}}3、RightPanelForSearchResult类(1)类名称为RightPanelForSearchResult,包名称为com.px1987.imsystem.client.frame.messagemanageframe,继承于javax.swing.JPanel类(2)编程该类package com.px1987.imsystem.client.frame.messagemanageframe;import java.awt.BorderLayout;import java.awt.Cursor;import java.awt.FlowLayout;import youtManager;import javax.swing.ImageIcon;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextField;import ponent.SelfDefineJLabel_SetupFont;import com.px1987.imsystem.client.frame.MessageManageMainFrame;importcom.px1987.imsystem.client.frame.messagemanageframe.event.MessageManageMainFrame_Act ionListenerEventHandler;importcom.px1987.imsystem.client.frame.messagemanageframe.event.MessageManageMainFrame_Mo useListener_MouseClickedEventHandler;import com.px1987.imsystem.client.util.IMSystemClientUtils;public class RightPanelForSearchResult extends JPanel {private static final long serialVersionUID = 6179128149190979439L;private MessageManageMainFrame oneMessageManageMainFrame=null;private RightSearchResultPanel rightSearchResultPanel =null;private JLabel returnImageLabel =null;private JLabel nextPageLabel = null;private JLabel pageCounterLabel =null;private JTextField someOnePageJTextField =null;private JLabel textLabel = null;private JLabel previousPageLabel = null;private JLabel firstPageLabel = null;private JLabel lastPageLabel = null;public RightPanelForSearchResult() {super();}public RightPanelForSearchResult(MessageManageMainFrame oneMessageManageMainFrame) {super();this.oneMessageManageMainFrame=oneMessageManageMainFrame;creatRightPanel_ForSearchResult();}public RightPanelForSearchResult(LayoutManager layout) {super(layout);}public RightPanelForSearchResult(boolean isDoubleBuffered) {super(isDoubleBuffered);}public RightPanelForSearchResult(LayoutManager layout,boolean isDoubleBuffered) {super(layout, isDoubleBuffered);}private void creatRightPanel_ForSearchResult(){initRightPanel();createRightUpPanel();createRightSearchResultPanel();createRightDownPanel();}private void initRightPanel(){this.setLayout(new BorderLayout());}private void createRightUpPanel(){JLabel searchResultLabel = new SelfDefineJLabel_SetupFont();searchResultLabel.setText("搜索的结果信息如下:");returnImageLabel = new SelfDefineJLabel_SetupFont();returnImageLabel.setText("返回");returnImageLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); //改变鼠标形状returnImageLabel.setIcon(new ImageIcon(getClass().getResource("/images/messageManageFrame/return.jpg")));returnImageLabel.addMouseListener(newMessageManageMainFrame_MouseListener_MouseClickedEventHandler(oneMessageManageM ainFrame,"returnImageLabel_mouseClicked"));JPanel rightUpPanel = new JPanel();rightUpPanel.setLayout(new BorderLayout());rightUpPanel.setBackground(IMSystemClientUtils.getNoSerializableVOInstance().getLoginButtonBgColor());rightUpPanel.add(searchResultLabel, java.awt.BorderLayout.CENTER);rightUpPanel.add(returnImageLabel, java.awt.BorderLayout.EAST);this.add(rightUpPanel, java.awt.BorderLayout.NORTH);}private void createRightSearchResultPanel(){JScrollPane rightCenterScrollPane = new JScrollPane();rightSearchResultPanel = new RightSearchResultPanel(oneMessageManageMainFrame);rightCenterScrollPane.getViewport().add(rightSearchResultPanel);this.add(rightCenterScrollPane, java.awt.BorderLayout.CENTER);}private void createRightDownPanel(){FlowLayout flowLayout3 = new FlowLayout();flowLayout3.setAlignment(FlowLayout.RIGHT);JPanel rightDownPanel = new JPanel();rightDownPanel.setLayout(flowLayout3);rightDownPanel.setBackground(IMSystemClientUtils.getNoSerializableVOInstance().getLoginButtonBgColor());nextPageLabel = new JLabel();nextPageLabel.setIcon(new ImageIcon(getClass().getResource("/images/messageManageFrame/nextPage.jpg")));nextPageLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); //改变鼠标形状nextPageLabel.addMouseListener(newMessageManageMainFrame_MouseListener_MouseClickedEventHandler(oneMessageManageM ainFrame,"nextPageLabel_mouseClicked"));pageCounterLabel = new JLabel();pageCounterLabel.setText("页/X页");textLabel = new JLabel();textLabel.setText("第");lastPageLabel = new JLabel();lastPageLabel.setIcon(new ImageIcon(getClass().getResource("/images/messageManageFrame/lastPage.jpg")));lastPageLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); //改变鼠标形状lastPageLabel.addMouseListener(newMessageManageMainFrame_MouseListener_MouseClickedEventHandler(oneMessageManageM ainFrame,"lastPageLabel_mouseClicked"));someOnePageJTextField = new JTextField();someOnePageJTextField.setColumns(5);someOnePageJTextField.addActionListener(newMessageManageMainFrame_ActionListenerEventHandler(oneMessageManageMainFrame,"som eOnePageJTextField_onClick"));firstPageLabel = new JLabel();firstPageLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); //改变鼠标形状firstPageLabel.setIcon(new ImageIcon(getClass().getResource("/images/messageManageFrame/firstPage.jpg")));firstPageLabel.addMouseListener(newMessageManageMainFrame_MouseListener_MouseClickedEventHandler(oneMessageManageM ainFrame,"firstPageLabel_mouseClicked"));previousPageLabel = new JLabel();previousPageLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); //改变鼠标形状previousPageLabel.setIcon(new ImageIcon(getClass().getResource("/images/messageManageFrame/previousPage.jpg")));previousPageLabel.addMouseListener(newMessageManageMainFrame_MouseListener_MouseClickedEventHandler(oneMessageManageM ainFrame,"previousPageLabel_mouseClicked"));rightDownPanel.add(firstPageLabel);rightDownPanel.add(previousPageLabel);rightDownPanel.add(textLabel);rightDownPanel.add(someOnePageJTextField);rightDownPanel.add(pageCounterLabel);rightDownPanel.add(nextPageLabel);rightDownPanel.add(lastPageLabel);this.add(rightDownPanel, java.awt.BorderLayout.SOUTH);}}4、RightSearchResultPanel类(1)类名称为RightSearchResultPanel,包名称为com.px1987.imsystem.client.frame.messagemanageframe,继承于javax.swing.JPanel类。
J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)详细设计说明书(第5部分)历史记录目录第一章引言 .................................................................................. 错误!未定义书签。
1.1编写目的.......................................................................... 错误!未定义书签。
1.2 背景................................................................................. 错误!未定义书签。
1.3 定义................................................................................. 错误!未定义书签。
1.4 参考资料......................................................................... 错误!未定义书签。
第二章程序系统的结构 .............................................................. 错误!未定义书签。
2.1 系统结构图..................................................................... 错误!未定义书签。
2.2 包图................................................................................. 错误!未定义书签。
2.2.1 客户端包图.......................................................... 错误!未定义书签。