仿QQ即时通信系统开发视频教程(2016版)
模仿QQ聊天程序
软件项目实训报告书学院_ 计算机科学与技术_专业__ _ 软件工程__ _组长__杜巍巍(第7组)_成员信息:目录1 项目介绍1.1项目背景及意义 (3)1.2项目内容及目标 (3)1.3 关键技术 (3)2 需求分析2.1 功能需求 (4)2.2 界面需求 (5)2.3 性能需求 (5)3总体设计3.1 系统总体设计 (5)3.2 功能模块设计 (6)3.3 开发环境 (7)4 详细设计与实现4.1服务器端与客户端通信流程图 (8)4.2 E-R图 (9)4.3甘特图 (10)4.4各主要模块流程图 (10)5 实现与结果5.1 服务器登陆界面 (13)5.2清理用户 (14)5.3 聊天室界面 (15)5.4 群聊功能实现 (16)5.5 私聊功能实现 (17)5.6 文件传输功能实现 (18)5.7 文件传输取消功能实现 (18)5.8 窗口抖动功能实现 (19)6 测试与调试6.1 测试环境配置 (19)6.2 功能性测试 (19)6.3 容错性测试 (20)6.4 易用性测试 (20)6.5 文档测试 (20)7 总结1.项目简介1.1项目背景及意义近年来,随着全球信息化不断发展,网络也在快速发展,各企事业单位处于能高效快速安全的处理企业各种事物的目的,越来越多的企业在其内部使用局域网工作,在局域网的帮助下,企业得以简化信息流程,提高信息交换速度,从而得以提高工作效率。
而局域网聊天工具应运而生,所谓局域网聊天工具,是在局域网内部使用,用户之间用来交流的一个工具,一般都具有文本聊天和文件传输功能及聊天记录报讯等功能。
局域网聊天工具因其使用简单,系统资源消耗少,安全性高等优点,成为各企事业单位等的局域网内广泛应用的软件之一。
本次项目主要是设计一个基于WINDOWS平台的局域网即时聊天工具,具体是采用C/S模式实现用户之间的通信,并阐述本软件的相关功能,特点及使用方法,并会在之后详细介绍所使用的相关技术,及各个模块的功能和实现方法等。
仿QQ消息通讯的设计毕业论文
仿QQ消息通讯的设计毕业论文新增用户注册、好友添加评论、群添加评论、群管理、界面管理等功能该系统的操作和使用方式保持了用户使用腾讯QQ的习惯,具有操作灵活、使用方便、界面交互能力强的特点,方便聊天用户使用。
自从在微软SQL ServerXXXX上发展以来,它以极高的用户增长率赢得了中国大多数用户,成为一方霸主。
自直接开发以来,QQ基于其更好的用户体验,不断更新一代又一代的QQ。
从第一版粗糙的用户界面到2013版华丽的用户界面,这一切都显示了QQ对用户界面交互体验的重视。
因此,新系统将使用QQ最新的2013版用户界面作为参考界面进行开发。
QQ当前聊天服务架构分析:客户端QQ:1服务器网络传输协议客户端UDP图1-1 QQ聊天服务架构可以确定腾讯QQ提供多服务器服务,服务器控制客户端,客户端之间进行UDP直接通信此外,只有当两个客户端之间不能建立直接连接时,服务器才进行传输通信。
分析当前MSN的聊天服务架构:服务器端的传输控制协议客户端图1-2 MSN聊天服务架构MSN客户端直接通信是通过服务器作为中介转发的,这优于腾讯QQ。
有鉴于此,新系统采用QQ型通讯方式开发1.3项目研究的目的和方法1.3.1项目研究目的本聊天系统的设计与开发,通过基本的聊天功能分析、数据分析和信息类型处理过程,采用数据库设计、维护和SQL查询数据库表技术开发一个可以在局域网中实际应用的聊天系统该系统运行在Window 7及以上操作系统上,是用C#和java开发的。
对于大量的数据信息,Microsoft SQL Server2005数据库用于存储和处理,缓存文件和配置文件用于客户端本地信息管理“局域网聊天系统”包括好友聊天、群聊,2ucuse case model未登录聊天系统注册新用户聊天用户登录?包括?登录状态设置图3-1未登录聊天系统用例图用例名称参与者目的过程描述异常事件流注册新用户聊天用户可以通过注册为系统新用户来登录系统聊天1)进入注册页面2)填写昵称、密码和基本联系信息3)提交注册信息并提示注册用户账户用户的信息格式填写不正确:提示输入错误的格式并拒绝提交用例名称参与者目的过程描述异常事件流登录聊天用户通过登录进入聊天系统进行操作1)进入用户登录窗口2)填写用户名和密码,登录状态[默认在线]3)点击登录进入系统,如果失败,提供响应失败消息。
仿QQ聊天软件MyQQ源代码教学(北大青鸟完整版)
需求分析——功能分析
主要功能:
注册与登录 好友管理 消息管理 个人设置
需求分析——界面分析
需要的界面:
注册界面 登录界面 登录后的主界面 查找/添加好友界面 聊天界面 系统消息界面 个人设置界面
头像列表界面
需求分析——辅助类分析
需要添加的辅助类:
DBHelper类 UserHelper 类
小组分工
4
4 4 4 4
软件开发流程
比尔盖子是一名建筑工人 起初只干一些比较简单的 建筑工作 凭个人技术和经验,不需要特 别设计,可以顺利完成
如同编写早期比较小的程序
软件开发流程
新任务:建造一间非常美 丽而完整的房间 工作变得复杂许多
像不断发展的软件,功能 越来越多,越来越复杂
软件开发流程
软件复杂性
图形用户界面 客户/服务器结构 分布式应用 数据通信 超大型关系型数据库
// 判断 ListView 中是否有选中的项 if (lvFaces.SelectedItems.Count == 0) { // … } // 获得选中的头像的索引 int faceId = lvFaces.SelectedItems[0].ImageIndex;
第四次集中编码:A任务
个人信息修改功能
第一次集中编码:难点分析
好友列表——第三方控件 SideBar
SbGroup 类型 Items 属性 Groups 属性 SbItem 类型
第一次集中编码:难点分析
SideBar
// 命名空间 using Aptech.UI; // 添加组 sbFriends.AddGroup("我的好友"); sbFriends.AddGroup("陌生人"); 显示的文字 // 添加项 SbItem item = new SbItem((string)dataReader["NickName"], (int)dataReader["FaceId"]); sbFriends.Groups[0].Items.Add(item); 显示的图像索引
仿QQ即时通讯应用软件开发毕业设计
仿QQ即时通讯应用软件开发摘要:本文按照软件工程的思想和开发步骤,采用C/S模式,利用SQL Server数据库,使用Visual C++开发工具设计并实现了一个仿QQ的即时通讯应用软件。
该软件实现了消息的即时传输、文本传输、语音聊天等功能,具体包括网络通信、协议包封装与解析、文件传输以及基于directsound框架的音频处理。
系统为保证语音传输的质量和效率,采用一定的声音编码格式对声音数据打包并传输到接收方。
该系统功能全面,界面美观,操作方便,具有一定的实用价值。
关键词:socket, 文字聊天,文件传输,实时语音传输,directsoundAbstract: In this paper, according to the software engineering and development steps, using C / S mode, the SQL Server database and Visual C++ language the system was designed and implement.The software has implemented the real-time transmission, transmission of text messages, voice chat and other functions, such as network communications, protocol packet encapsulation and analysis, file transfer and frame-based audio processing directsound.To ensure the quality and efficiency of the voice transmission the system adopt a certain voice encoding format for audio coding packaged and transmitted to the receiver side. The system is fully functional, beautiful interface, easy to operate, and has a certain practical value.Keywords: socket, text chat,file transfer, real-time voice transmission, directsound一、概述互联网的迅速发展不仅改变了人们的意识形态,更影响着人们的生活方式,网络元素在不知不觉中渗透到生活的每一个角落。
《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——完善客户端系统信息主窗口内树节点中各种事件处理功能程序类
J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——完善客户端系统信息主窗口内树节点中各种事件处理功能程序类1.1.1完善客户端系统信息主窗口内树节点中各种事件处理类1、与FriendInfoTreeNodeSendMessagePopupMenu类有关的事件(1)类名称为TreeNodeSendMessagePopupMenu_ActionListenerEventHandler,包名称为com.px1987.imsystem.client.frame.imsystemmainframe.treeevent,实现java.awt.event.ActionListener接口(2)编程该事件类package com.px1987.imsystem.client.frame.imsystemmainframe.treeevent;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import ng.reflect.InvocationTargetException;import ng.reflect.Method;import javax.swing.tree.DefaultMutableTreeNode;import com.px1987.imsystem.client.exception.IMSystemException;import com.px1987.imsystem.client.frame.IMSystemMainFrame;import com.px1987.imsystem.client.util.HttpClient_JDICUtils;import erInfoBaseVO;public class TreeNodeSendMessagePopupMenu_ActionListenerEventHandler implements ActionListener {private IMSystemMainFrame eventSourceContainer = null;private String eventHandlerMethodName = null;public TreeNodeSendMessagePopupMenu_ActionListenerEventHandler() { super();}publicTreeNodeSendMessagePopupMenu_ActionListenerEventHandler(IMSystemMainFrame 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 sendIMMessageToSomeOneMenuItem_onClick(ActionEvent e) { //向朋友发送IM消息的菜单事件响应DefaultMutableTreeNodecurrentSelectedSomeOneTreeNode=eventSourceContainer.getCenterTreeScrollPanel().getSelect DefaultMutableTreeNode();UserInfoBaseVO someOneFindFriendInfoVO =(UserInfoBaseVO)currentSelectedSomeOneTreeNode.getUserObject();try {HttpClient_JDICUtils.openChatMainFrame(someOneFindFriendInfoVO);} catch (IMSystemException exception) {exception.printStackTrace();System.out.println("出现了OASystemException异常错误,错误信息为:" +exception.getMessage());}}}2、CenterInfoTree_MouseListener_MouseReleasedEventHandler类(1)类名称为CenterInfoTree_MouseListener_MouseReleasedEventHandler,包名称为com.px1987.imsystem.client.frame.imsystemmainframe.treeevent,继承java.awt.event.MouseAdapter(2)编程该事件类package com.px1987.imsystem.client.frame.imsystemmainframe.treeevent; import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import ng.reflect.InvocationTargetException;import ng.reflect.Method;import javax.swing.tree.DefaultMutableTreeNode;import com.px1987.imsystem.client.frame.IMSystemMainFrame;import com.px1987.imsystem.client.util.IMSystemClientUtils;import erInfoBaseVO;public class CenterInfoTree_MouseListener_MouseReleasedEventHandler extends MouseAdapter {private IMSystemMainFrame eventSourceContainer = null;private String eventHandlerMethodName = null;public CenterInfoTree_MouseListener_MouseReleasedEventHandler() {super();}public CenterInfoTree_MouseListener_MouseReleasedEventHandler(IMSystemMainFrameeventSourceContainer,String eventHandlerMethodName) {super();this.eventSourceContainer = eventSourceContainer;this.eventHandlerMethodName = eventHandlerMethodName;}public void mouseReleased(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 centerInfoTree_mouseReleased(MouseEvent oneMouseEvent) { if (! (oneMouseEvent.isPopupTrigger())) { //识别是否为右键单击,不是则直接返回return;}if(oneMouseEvent.getSource()!=eventSourceContainer.getCenterTreeScrollPanel().getCenter InfoTree()){ // 识别是否为对中间的“树对象”右键单击return;}if(eventSourceContainer.getCenterTreeScrollPanel().getCenterInfoTree().getPathForLocation (oneMouseEvent.getX(), oneMouseEvent.getY())==null){ // 别是否在树的某个节点外面单击eventSourceContainer.getCenterTreeScrollPanel().getTreeNodePopupMenu_byClickOut().sh ow(eventSourceContainer.getCenterTreeScrollPanel().getCenterInfoTree(), oneMouseEvent.getX(),oneMouseEvent.getY()); //显示在树外面点击的快捷菜单项目return;}eventSourceContainer.getCenterTreeScrollPanel().setSelectTreePathPath(eventSourceContai ner.getCenterTreeScrollPanel().getCenterInfoTree().getPathForLocation(oneMouseEvent.getX(), oneMouseEvent.getY()));eventSourceContainer.getCenterTreeScrollPanel().setSelectDefaultMutableTreeNode( ( DefaultMutableTreeNode)eventSourceContainer.getCenterTreeScrollPanel().getSelectTreePathPath().getLastPathComponent());/** 下面的代码是获得用户所选中的某个节点,并识别是点击了中间的节点还是好友叶节点,并获得对应的节点上的文字*/DefaultMutableTreeNode currentSelectedSomeOneTreeNode =eventSourceContainer.getCenterTreeScrollPanel().getSelectDefaultMutableTreeNode();if(currentSelectedSomeOneTreeNode.getUserObject() instanceof UserInfoBaseVO){ UserInfoBaseVO someOneFindFriendInfoVO =(UserInfoBaseVO)currentSelectedSomeOneTreeNode.getUserObject();eventSourceContainer.getCenterTreeScrollPanel().setSelectTreeNodeName(someOneFindFri endInfoVO.getUserIMCode());}else{eventSourceContainer.getCenterTreeScrollPanel().setSelectTreeNodeName(currentSelectedS omeOneTreeNode.toString());}boolean isSelectMyFriendsNode = eventSourceContainer.getCenterTreeScrollPanel().getSelectTreeNodeName().equals("我的好友");boolean isSelectNoKnownPersonNode = eventSourceContainer.getCenterTreeScrollPanel().getSelectTreeNodeName().equals("陌生人");boolean isSelectBlocNameListNode = eventSourceContainer.getCenterTreeScrollPanel().getSelectTreeNodeName().equals("黑名单");//下面识别当前选中的节点是“我的好友”节点、或者是“陌生人”、或者“黑名单”吗if (isSelectMyFriendsNode || isSelectNoKnownPersonNode ||isSelectBlocNameListNode) {eventSourceContainer.getCenterTreeScrollPanel().getTreeNodePopupMenu().getDeleteThis GroupMenuItem().setEnabled(false); //屏蔽树中的弹出菜单内的某些菜单项目eventSourceContainer.getCenterTreeScrollPanel().getTreeNodePopupMenu().getRenameMe nuItem().setEnabled(false); //屏蔽树中的弹出菜单内的某些菜单项eventSourceContainer.getCenterTreeScrollPanel().getTreeNodePopupMenu().getAddNewGr oupInfoMenuItem().setEnabled(true);eventSourceContainer.getCenterTreeScrollPanel().getTreeNodePopupMenu().show( eventSourceContainer.getCenterTreeScrollPanel().getCenterInfoTree(), oneMouseEvent.getX(),oneMouseEvent.getY());return;} else {eventSourceContainer.getCenterTreeScrollPanel().getTreeNodePopupMenu().getAddNewGr oupInfoMenuItem().setEnabled(false);eventSourceContainer.getCenterTreeScrollPanel().getTreeNodePopupMenu().getDeleteThis GroupMenuItem().setEnabled(true); //开启树中的弹出菜单内的某些被屏蔽的菜单项目eventSourceContainer.getCenterTreeScrollPanel().getTreeNodePopupMenu().getRenameMe nuItem().setEnabled(true); //开启树中的弹出菜单内的某些被屏蔽的菜单项}int nodeLevel = eventSourceContainer.getCenterTreeScrollPanel().getSelectDefaultMutableTreeNode().getLevel( );if (nodeLevel == 1) { //右击中间的“组”节点吗eventSourceContainer.getCenterTreeScrollPanel().getTreeNodePopupMenu().show( eventSourceContainer.getCenterTreeScrollPanel().getCenterInfoTree(), oneMouseEvent.getX(),oneMouseEvent.getY());return;}if (nodeLevel == 2) { //右击“组”节点中的某个“联系人”节点吗if(eventSourceContainer.getCenterTreeScrollPanel().getSelectTreeNodeName().equals( IMSystemClientUtils.getUserLoginOnLineInfoVOInstance().getUserIMCode())) { //是右击自己名称的树节点吗?eventSourceContainer.getCenterTreeScrollPanel().getTreeNodeSelfPopupMenu().show(eventSourceContainer.getCenterTreeScrollPanel().getCenterInfoTree(), oneMouseEvent.getX(),oneMouseEvent.getY());} else {eventSourceContainer.getCenterTreeScrollPanel().getTreeNodeSendMessagePopupMenu().s how(eventSourceContainer.getCenterTreeScrollPanel().getCenterInfoTree(), oneMouseEvent.getX(),oneMouseEvent.getY());}return;}}}3、CenterInfoTree_TreeSelectionListenerEventHandler类(1)类名称为CenterInfoTree_TreeSelectionListenerEventHandler,包名称为com.px1987.imsystem.client.frame.imsystemmainframe.treeevent,实现javax.swing.event.TreeSelectionListener接口(2)编程该事件类package com.px1987.imsystem.client.frame.imsystemmainframe.treeevent;import ng.reflect.InvocationTargetException;import ng.reflect.Method;import javax.swing.event.TreeSelectionEvent;import javax.swing.event.TreeSelectionListener;import com.px1987.imsystem.client.frame.IMSystemMainFrame;public class CenterInfoTree_TreeSelectionListenerEventHandler implements TreeSelectionListener {private IMSystemMainFrame eventSourceContainer = null;private String eventHandlerMethodName = null;public CenterInfoTree_TreeSelectionListenerEventHandler() {super();}public CenterInfoTree_TreeSelectionListenerEventHandler(IMSystemMainFrame eventSourceContainer,String eventHandlerMethodName) {super();this.eventSourceContainer = eventSourceContainer;this.eventHandlerMethodName = eventHandlerMethodName;}@SuppressWarnings("unchecked")public void valueChanged(TreeSelectionEvent treeSelectionEventObject) { Class currentEventHandlerClass = this.getClass();Method eventHandlerMmethod = null;try { //获得事件处理方法eventHandlerMmethod = currentEventHandlerClass.getMethod(this.eventHandlerMethodName, new Class[] {treeSelectionEventObject.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[] {treeSelectionEventObject});} 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 centerInfoTree_valueChanged(TreeSelectionEvent event) {eventSourceContainer.getCenterTreeScrollPanel().getCenterInfoTree().setEditable(false);//设置本树为可编辑状况/*JTree centerInfoTree = (JTree) event.getSource();DefaultMutableTreeNode someOneNode = (DefaultMutableTreeNode) centerInfoTree.getLastSelectedPathComponent();*/}}4、FriendInfoTreeNodePopupMenu_ActionListenerEventHandler类(1)类名称为FriendInfoTreeNodePopupMenu_ActionListenerEventHandler,包名称为com.px1987.imsystem.client.frame.imsystemmainframe.treeevent,实现java.awt.event.ActionListener接口(2)编程该事件类package com.px1987.imsystem.client.frame.imsystemmainframe.treeevent;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import ng.reflect.InvocationTargetException;import ng.reflect.Method;import javax.swing.tree.DefaultTreeModel;import com.px1987.imsystem.client.dialog.FindNewFriendAndGroupDialog;import com.px1987.imsystem.client.dialog.ShowMessageDialog;import com.px1987.imsystem.client.enumvo.ColumnShowType;import com.px1987.imsystem.client.enumvo.PersonHeadImageShowType;import erNameInfoShowType;import com.px1987.imsystem.client.exception.IMSystemException;import com.px1987.imsystem.client.frame.IMSystemMainFrame;import com.px1987.imsystem.client.util.IMSystemClientUtils;public class FriendInfoTreeNodePopupMenu_ActionListenerEventHandler implements ActionListener {private IMSystemMainFrame eventSourceContainer = null;private String eventHandlerMethodName = null;public FriendInfoTreeNodePopupMenu_ActionListenerEventHandler() {super();}public FriendInfoTreeNodePopupMenu_ActionListenerEventHandler(IMSystemMainFrame 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 bigHeadImageMenuItem_onClick(ActionEvent e) {IMSystemClientUtils.getUserLoginOnLineInfoVOInstance().setPersonHeadImageShowType (PersonHeadImageShowType.bigHeadImage);}public void smallHeadImageMenuItem_onClick(ActionEvent e) {IMSystemClientUtils.getUserLoginOnLineInfoVOInstance().setPersonHeadImageShowType (PersonHeadImageShowType.smallHeadImage);}public void standardHeadImageMenuItem_onClick(ActionEvent e) {IMSystemClientUtils.getUserLoginOnLineInfoVOInstance().setPersonHeadImageShowType (PersonHeadImageShowType.standardHeadImage);}public void showMyHeadImageMenuItem_onClick(ActionEvent e) {}public void showNoKnownPersonGroupInfoMenuItem_onClick(ActionEvent e) {}public void showBlockNameListMenuItem_onClick(ActionEvent e) {}public void addNewGroupInfoMenuItem_onClick(ActionEvent e) { //添加某个组项目时,首先激活文字输入框,让用户输入新的节点名eventSourceContainer.getTreeNodeInputTextPanel().getTreeNodeInputTextField().setText("" ); //清空原来的输入内容eventSourceContainer.getTreeNodeInputTextPanel().getTreeNodeInputTextField().requestFo cusInWindow(); //请求此Component 获取输入焦点(将鼠标自动放入到文字输入框中)。
《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——信息主窗口类中的各个子面板和弹出式菜单程序类(第2部分)
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即时通讯》教学设计
《网络交流——QQ即时通讯》教学设计一、教学目标1. 了解QQ即时通讯的基本概念和使用方法。
2. 学会添加好友和创建群聊。
3. 学会发送消息、表情和文件。
4. 学会了解常用的设置和个性化功能。
二、教学重点1. 添加好友和创建群聊。
2. 发送消息、表情和文件。
三、教学准备1. 电脑/手机2. QQ软件3. PPT或黑板四、教学过程步骤一:引入呈现PPT或黑板上“网络交流——QQ即时通讯”的主题,让学生了解即将学习的内容。
步骤二:讲解QQ的基本概念和使用方法1. 介绍QQ是一款著名的即时通讯软件,几乎所有人都会使用。
2. 讲解如何下载和安装QQ软件,并演示如何注册一个QQ账号。
3. 教授如何登录QQ并进入主界面。
步骤三:添加好友和创建群聊1. 教授如何添加好友,包括搜索好友的QQ号码、添加通讯录好友和通过二维码添加好友。
2. 演示如何创建群聊,包括创建普通群和创建临时会话。
步骤四:发送消息、表情和文件1. 教授如何给好友发送消息,包括文本消息和语音消息。
2. 演示如何使用QQ表情,包括表情的选择和发送。
3. 教授如何发送文件,包括图片、音频、视频和文档。
步骤五:常用的设置和个性化功能1. 讲解QQ的一些常用设置,如头像、个性签名、好友备注等。
2. 演示如何设置QQ的在线状态和权限设置。
3. 介绍QQ的个性化功能,如背景图设置、气泡聊天框和主题皮肤等。
步骤六:实践操作和巩固学生分组进行实践操作,互相添加好友,创建群聊,发送消息、表情和文件,并尝试设置和个性化功能。
五、教学拓展1. 鼓励学生使用QQ与家人、朋友进行交流,并及时处理常见的QQ问题。
2. 介绍QQ的其他功能,如语音通话、视频通话、QQ空间等。
六、教学反馈观察学生实践操作的情况,了解学生是否掌握了QQ即时通讯的基本使用方法。
帮助学生解决遇到的问题和困惑。
七、教学总结对本节课的内容进行总结,并强调QQ即时通讯在日常生活和学习中的重要性。
常用的设置和个性化功能。
c++MFC CSocket仿QQ聊天软件,实现1对1聊天,群聊
c++/MFC CSocket仿QQ聊天软件,实现1对1聊天,群聊分类:c++ 2012-11-25 16:45 1582人阅读评论(13) 收藏举报c++C++mfcMFCqqQQsocket聊天学习,c++有2个星期了。
本来,本人是做php出身的。
做php快2年了,最近身边多了很多高手。
让自己对c开始感兴趣了,就开始学习c++了。
首先接触的就是mfc。
前几天,看到了一个博文,是有关,mfc网络编程的。
可对方,的实例只能是多对多,出于兴趣,自己改写了下它的程序,实现了点对点的聊天。
所以,本实例并非纯原创的。
这个还请大家见谅,尤其是作者。
我在他程序基础上,增加了1对1的聊天,同时还保留了群聊。
而且,最关键的是,我增加了很多备注。
很适合新手学习。
本人也是新手,还请各位高手提出宝贵建议。
先谢谢大家了。
如果要转载请注明原地址:/open520yin/article/details/8222279实例下载地址:/detail/open520yin/4808903(为了自己能有点下载积分,客户端和服务端一起打包5个积分不算贵吧。
呵呵。
)大家要是想看懂这个可能还需要先了解一下mfc的socket的一些基本使用规则我也有一篇博文写了c++/MFC 极为简单的socket实例:/open520yin/article/details/8202465MFC的CSocket编程,利用CSocket实现一个基于TCP实现一个QQ聊天程序。
///////////////////////////////////////////////////////////////////////// 服务端start ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////先讲讲服务端,一切先从服务端开始:首先就是要使用AfxSocketInit初始化winsocket,[cpp]view plaincopyprint?1. //初始化winSock库,成功则返回非0否则返回02. WSAData wsData;3. if(!AfxSocketInit(&wsData))4. {5. AfxMessageBox(_T("Socket 库初始化出错!"));6. return false;7. }m_iSocket 是一个CServerSocket*的指针 ,CServerSocket类是一个我们自己的类我会在后面给出相应代码,他继承于CSocket类。
(完整)基于MFC仿QQ聊天程序设计完整实例教程
本系统基于客户端/服务器基本原理,程序即是服务端,也是客户端,通过IP就可以相互添加好友,并且实现点到点通信,有聊天记录(未实现根据用户发送的消息而改变字体颜色,只能在客户端改),字体颜色设置(一改全改~),包含主界面MaindBord和聊天Talk两大功能模块。
(1) MaindBord模块A、登录模块登陆模块的实现过程有下面几个步骤:(1)初始化列表信息,获取用户名,服务器的IP地址,使按键失效(2)确认登陆后创建套接字,绑定,监听(3)初始化成功后,激活添加好友和隐藏功能B、好友模块添加好友的实现过程有下面几个步骤:(1)弹出对话框(2)获取对话框中的IP(3)检查对方是否在线,建立连接(4)发送请求验证C、好友列表模块(1)客户接收请求,将服务端加入列表,发送客户端信息(2)服务端得到客户端信息,加入列表(3)双击好友列表,弹出发送信息对话框D、隐藏模块(1)隐藏与显示(2)响应鼠标,弹出控制菜单(2)聊天Talk模块A、发送信息模块聊天模块中,发送信息模块的实现过程有下面几个步骤:(1)通过列表双击一个好友为聊天对象,弹出聊天窗口;(2)用户按下发送按钮后,检测对方是否在线,检测对方是否在线(3)将聊天内容发送出去(4)在本地即时聊天内容显示的编辑框中添加发送的内容并写入聊天记录。
B、接收信息模块聊天模块中,接收信息模块的实现过程有下面几个步骤:(1)由主界面判断接收到信息的类型,是否为好友发来信息,如果是,则打开聊天窗口(2)读取消息,并写入聊天记录,(3)载入字体颜色信息。
(4) 显示聊天记录C、聊天记录管理模块聊天记录管理模块的实现过程有下面几个步骤:(1)将发送内容和接收内容写入文本文件;(2)显示聊天记录;(3)删除聊天记录。
D、字体颜色模块实现字体颜色模块的过程有下面几个步骤:(1)调用系统字体,获取字体,写入存档(2) 调用系统字体颜色,获取颜色,写入存档(3)读取、更新字体颜色。
课程设计项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——构建出客户端系统中的各个自定义的组件类程序
(完整)基于MFC仿QQ聊天程序设计完整实例教程
本系统基于客户端/服务器基本原理,程序即是服务端,也是客户端,通过IP就可以相互添加好友,并且实现点到点通信,有聊天记录(未实现根据用户发送的消息而改变字体颜色,只能在客户端改),字体颜色设置(一改全改~),包含主界面MaindBord和聊天Talk两大功能模块。
(1) MaindBord模块A、登录模块登陆模块的实现过程有下面几个步骤:(1)初始化列表信息,获取用户名,服务器的IP地址,使按键失效(2)确认登陆后创建套接字,绑定,监听(3)初始化成功后,激活添加好友和隐藏功能B、好友模块添加好友的实现过程有下面几个步骤:(1)弹出对话框(2)获取对话框中的IP(3)检查对方是否在线,建立连接(4)发送请求验证C、好友列表模块(1)客户接收请求,将服务端加入列表,发送客户端信息(2)服务端得到客户端信息,加入列表(3)双击好友列表,弹出发送信息对话框D、隐藏模块(1)隐藏与显示(2)响应鼠标,弹出控制菜单(2)聊天Talk模块A、发送信息模块聊天模块中,发送信息模块的实现过程有下面几个步骤:(1)通过列表双击一个好友为聊天对象,弹出聊天窗口;(2)用户按下发送按钮后,检测对方是否在线,检测对方是否在线(3)将聊天内容发送出去(4)在本地即时聊天内容显示的编辑框中添加发送的内容并写入聊天记录。
B、接收信息模块聊天模块中,接收信息模块的实现过程有下面几个步骤:(1)由主界面判断接收到信息的类型,是否为好友发来信息,如果是,则打开聊天窗口(2)读取消息,并写入聊天记录,(3)载入字体颜色信息。
(4) 显示聊天记录C、聊天记录管理模块聊天记录管理模块的实现过程有下面几个步骤:(1)将发送内容和接收内容写入文本文件;(2)显示聊天记录;(3)删除聊天记录。
D、字体颜色模块实现字体颜色模块的过程有下面几个步骤:(1)调用系统字体,获取字体,写入存档(2) 调用系统字体颜色,获取颜色,写入存档(3)读取、更新字体颜色。
模拟QQ的网络聊天系统
第一部分绪论1.1课题的来源及意义近年来随着PC的广泛应用和网络的不断发展,目前网络技术已经成为了计算机领域内的最热门的发展方向。
当前是数字信息时代,网络时代,任何一种编辑工具都不能忽视在网络上的应用,并且随着Internet 的普及和宽带技术的成熟,越来越多的用户进入网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效,与此同时一个新型的Web应用程序为网民之间提供了一个实时通信的功能和场所,这就是聊天室。
在网络早期就开始盛行,不论是BBS,IRC 都有类似网上聊天室的机制。
聊天室为网友提供了实时性对话的渠道,是网络上极为流行的一项服务,极大程度上方便了处于世界各地的友人之间的相互联系,也使世界好像一下子缩小了,不管你在哪里,只要你上了网,打开这些软件,就可以给你的朋友发信息,不管对方是否同时也在线,只要知道他的号码。
聊天室适用于网上会议或闲聊的一些场合。
聊天室为网友提供了较好的交友环境,网友之间相互以文字交谈,在形式上有点类似笔友的性质,却大大节省了书信往返的时间,这也是网上交友之所以如此热门的原因。
1.2课题设计的目的和要求1、综合运用本课程及计算机网络的相关知识设计并实现一个网络应用程序,以Visual C++6.0作为开发平台,通过实践复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力,进一步加强winsock编程技术。
2、采用客户/服务器模式,分为客户端程序和服务器程序。
服务器采用WINSOCK I/O模型中的任一种,支持多个客户同时在线聊天。
客户端程序和服务器程序通过网络交换聊天字符串内容,服务器窗口的列表框中显示当前在线用户,支持客户端之间的私聊(可以通过服务器中转)。
1.3 时间安排★选择课题 1天★总体设计和详细设计 8天★源代码 3天★调试与测试 2天★书写实验报告 1天第二部分系统开发环境与关键技术2.1系统开发环境◆操作系统:WINDOWS XP◆开发平台:Microsoft Visual C++6.0、Microsoft Visio 2003、 MSDN◆开发语言:C++2.2 关键技术2.2.1 Visual C++和面向对象程序设计VC基于C,C++语言,主要由MFC组成,是与系统联系非常紧密的编程工具,它兼有高级和低级语言的双重性,功能强大,灵活,执行效率高,几乎可以说VC在Windows平台无所不能。
基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——需求规格说明书
基于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技能培训有关的各个方面的业务、并期望能够取得比较好的效益和提高各项教育产品的质量以迎接新的挑战,需要全面地提升本土化的信息化项目建设的进度。
仿QQ聊天简单的UDP传输实例
仿QQ聊天简单的UDP传输实例来西安八天了,一直忙做一个B/S系统,通过网站控制视频距阵来切换摄像头和红外报警.最后搞定了,把一些思路和大家分享下.完成此功能的技术要点就是UDP协议传输, UDP传输的得大的一个特点就是个无连接协议,传输数据之前源端和终端不建立连接,当UDP它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。
在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP 把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
看到这大家想想QQ聊天就可以更好的理解,QQ聊天就是用UDP传输的. 以下通过java代码来简单的实现一个简单的通讯首先创建一个客户端public class UDPClient {private static final int PORT = 5000; //注意这个,这个是服务的端口private DatagramSocket dataSocket;private DatagramPacket dataPacket;private byte sendDataByte[];private String sendStr;public UDPClient() {Init();}public void Init() {try {// 指定端口号,避免与其他应用程序发生冲突dataSocket = new DatagramSocket(PORT+1); //因为是在本机测试,所以端口会冲突,我就加了一个1。
如果有单独的服务器即去掉sendDataByte = new byte[1024];sendStr = "UDP方式发送数据"; //这里是重点就是转输数据。
一般要控制硬件,就要传一点指令过去如:FFAADDFFsendDataByte = sendStr.getBytes(); // 这里也是重点,就是把字符转换成byte 结合项目需要,自己写方法转换dataPacket = new DatagramPacket(sendDataByte, sendDataByte.length,InetAddress.getByName("localhost"), PORT);dataSocket.send(dataPacket);} catch (SocketException se) {se.printStackTrace();} catch (IOException ie) {ie.printStackTrace();}}public static void main(String args[]) {new UDPClient();}}然后创建服务器import java.io.IOException;import .*;public class UDPServer {private static final int PORT = 5000;private DatagramSocket dataSocket;private DatagramPacket dataPacket;private byte receiveByte[];private String receiveStr;public UDPServer() throws IOException {Init();}public void Init() throws IOException {dataSocket = new DatagramSocket(PORT);receiveByte = new byte[1024];dataPacket = new DatagramPacket(receiveByte, receiveByte.length);receiveStr = "";int i = 0;while (i == 0) { // 无数据,则循环dataSocket.receive(dataPacket);i = dataPacket.getLength();// 接收数据if (i > 0) {// 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点receiveStr = new String(receiveByte, 0, dataPacket.getLength());System.out.println("客户传过来的数字"+receiveStr);i = 0;// 循环接收}}}public static void main(String args[]) throws IOException {new UDPServer();}}测试,首先启动服务程序,然后运行客户端就可以测试效果了。
仿Telegram即时通讯应用软件开发毕业设计
仿Telegram即时通讯应用软件开发毕业设计目标本文档旨在介绍一份关于仿Telegram即时通讯应用软件的毕业设计方案。
该方案旨在通过设计和开发一个类似Telegram的即时通讯应用软件,实现与用户的即时交流和信息分享。
背景随着社交媒体和智能手机的普及,人们对于即时通讯应用软件的需求越来越高。
Telegram作为一款广受欢迎的即时通讯应用软件,具有丰富的功能和用户友好的界面,被广泛使用。
方案概述本毕业设计将通过以下步骤来实现仿Telegram即时通讯应用软件的开发:1. 需求分析:分析用户需求,并确定所需的功能和特性。
这将作为整个开发过程的基础。
2. UI/UX设计:设计用户界面和用户体验,以确保应用软件的易用性和吸引力。
3. 后端开发:开发应用软件的后端,包括用户身份验证、消息传递和数据存储等功能。
4. 前端开发:开发应用软件的前端,包括用户界面的实现和与后端的交互。
5. 测试和优化:对开发完成的应用软件进行系统测试,并根据反馈和用户体验进行优化和改进。
预期结果通过完成该毕业设计,预计可以获得以下结果:1. 一个功能齐全、用户友好的仿Telegram即时通讯应用软件。
2. 了解即时通讯应用软件的设计和开发过程,以及相关技术和工具的应用。
3. 增强项目管理和团队合作能力,通过与团队成员合作完成整个开发过程。
时间计划在完成该毕业设计的整个过程中,我们将按照以下时间计划进行安排:- 需求分析:1周- UI/UX设计:2周- 后端开发:4周- 前端开发:4周- 测试和优化:2周- 部署和发布:1周预计成本完成该毕业设计所需的预计成本包括以下方面:- 硬件:开发所需的计算机和服务器设备。
- 软件:开发所需的开发工具和相关软件。
- 人力资源:开发过程中的团队成员工资和奖励等。
具体成本将根据实际需求和资源情况进行评估和筹备。
风险和挑战在毕业设计过程中可能会遇到以下风险和挑战:1. 技术挑战:实现某些高级功能和特性可能需要面临技术限制和难题。
基于UDP传输协议的实时通信系统的开发(仿qq聊天程序)
基于UDP传输协议的实时通信系统的开发(仿qq聊天程序)摘要互联网的高速发展正改变着人类的生活,它的多姿多彩正一点一滴的渗透到人们生活的每个方面,Internet覆盖的广阔性是世界各地人们利用互联网进行互通信息的重要手段。
为了满足人们相互沟通的需要,我们基于VC平台开发了即时通信实时通信系统,采用C/S ...<P>摘 要<BR>互联网的高速发展正改变着人类的生活,它的多姿多彩正一点一滴的渗透到人们生活的每个方面,Internet覆盖的广阔性是世界各地人们利用互联网进行互通信息的重要手段。
为了满足人们相互沟通的需要,我们基于VC平台开发了即时通信实时通信系统,采用C/S 框架的基于UDP传输协议的实时通信系统。
<BR>该软件主要完成了友好的用户界面的设计,用户基本信息的的保存以及聊天信息的保存。
为了更好的保存各种信息,我设计了相应的数据表单,并应用了数据文档的打开与添加读取技术完成对数据文档的操作,为了更好的保存用户的基本信息,我采用了对数据文档的编程,使得用户的信息得到安全的保护,并且避免了用户输入数据信息流失。
为了使软件更迷人,我采用了仿QQ聊天程序编程,使得运行该软件时看到类似QQ聊天的界面,使人感到熟悉与亲切。
<BR>关键词:套接字udp协议实时通信<BR> <BR>ABSTRACT<BR>The super-speed development of the Internet is changing human life, it of versatile and a litt le bit positive a drop people who permeate to each aspect live, extensity that Internet overlay is important means that world-wide locations people make use of the Internet proceeding mutual communication information. For satisfying the demand that people communicate mutually, we base on the udp protocol of VC developped real-time comunications. <BR>That thesis completed the design of the friendly customer interface primarily, basic information in customer of of the conservancy between conservancy and chat information. For the sake of better conservancy every kind of information, I designed the homologous data form and list, and applied the technique of datadoument completeto the operation of the database, for the sake of the basic information of the better conservancy customer, I adopted to the plait distance of the registration form, make the information of the customer get the safe protection, and avoided the customer repetition input the registration information. For making software more charming, I adopted the system tray plait distance, making circulate the convenient a diagram object flash in that software hour system tray move, letting thateverybody having impulse that open it.<BR>Key word: socket;udp protocol;real-time comunications <p class='Vmh322'></p> </P><P>实时通信系统介绍<BR>首先介绍通信的概念,通信是通过某种媒体进行的信息传递。
仿qq即时通信软件
电信增值业务及软件开发一实验报告学院:软件工程学院专业:软件工程班级:1301116 指导老师:肖云鹏组员:张启林学号:2011214905 组员:陆俊名学号:2011214904 组员:黎宁学号:20112149032014年06月06日即时通信软件的实现一、实验目的1.熟悉通信软件开发平台的基本操作。
2.了解通信协议(TCP、UDP)。
3.开发通信软件。
二、实验内容1. 基于socket即时通信软件的设计。
2.描述客户端程序设计和服务器端程序设计思路。
3. 通过Swing实现通信软件界面。
4. 根据实验过程写出实验报告。
三、实验步骤及实验结果程序简介一个带界面的基于socket的即时通信软件,界面虽然简陋,但功能还是挺全的,既可以群聊,也可以私聊,可以通过指定客户端界面上的IP,多台PC机的通信。
简单讲讲实现的思路吧,服务器监听客户端,服务器和客户端都有消息线程,用来解析相应接受消息,也就是说,所有的客户端都是向服务器发送消息,服务器根据消息的格式进行转发,是群聊还是私聊等等。
关键代码分析服务器监听客户端线程类class ListenerThread extends Thread{public void run(){try{serverSocket = new ServerSocket(8888);}catch(IOException ex){messageArea.append(ex.toString());return;}while(true){Socket socket = null;try{socket = serverSocket.accept();BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintWriter pw = new PrintWriter(socket.getOutputStream(),true);String nick = br.readLine();//判断昵称是否重复if(isRepeated(nick)){pw.println("昵称重复,请输入新昵称后重新连接!");pw.close();br.close();socket.close();}else{//向客户端发送成功连接的信息pw.println("已经成功连接到服务器!");messageArea.append("客户端:“"+nick+"”"+"已经成功连接到服务器!\n\r");messageArea.setCaretPosition(messageArea.getText().length());//光标定位到最后//改变广播按钮和信息发送文本框状态message.setEditable(true);broadcast.setEnabled(true);message.setFocusable(true);//将昵称保存下来加入Vectornicks.add(nick);//遍历Vector中的元素combo.removeAllItems();for(int i = 0;i < nicks.size();i++){combo.addItem(nicks.get(i));}//维持这个客户端的通信ServerMsgThread t = new ServerMsgThread(socket,nick);t.start();//将线程加入Vector threadsthreads.add(t);}}catch(IOException ex){if(serverSocket.isClosed()){return;}else{messageArea.append(ex.toString()+"\n\r");}}}}}当监听到有客户端请求连接,接受连接,先判断从客户端发来的昵称是否已经存在,因为在此程序中昵称是作为客户端的标识,若没有重复,则相应的组件可以编辑,把此客户端添加到nicks中,记得更新组合框combo中的客户端。
基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——详细设计说明书(第1部分)
Input
昵称 性别
生日
密码
邮箱地址
手机号
验证码
Processing Output
检验用户输入信息是否合法,若是,创建新用户记 录,将用户信息写入数据库,为用户分配 ID 号,并 将 ID 号返回给用户。 注册成共,获取 ID 号或注册失败。
1922processing根据用户选择的好友在数据库中删除聊天记录output删除好友聊天记录成功或失败3刷新聊天记录input选择要刷新的好友名字processing根据用户选择的好友在数据库中刷新聊天记录output刷新好友聊天记录成功或失败4回复信息input选择要回复的好友processing根据用户选择的好友在数据库中回复聊天记录output回复好友聊天记录成功或失败5导入聊天记录input选择要导入的好友聊天记录processing在数据库中导入好友的聊天记录output导入好友聊天记录成功或失败6导出聊天记录input选择要导出的好友聊天记录processing在数据库中导出好友的聊天记录output导出好友聊天记录成功或失败5相关接口模块名称消息管理模块子模块接收消息模块
就读取上一次传送时候保存的文件传输进度,并将该进度(已发送字节数)和整个
文件传输给服务器,当接收方上线时,服务器将进度发送给接收方,接收方据此设
置文件指针,并继续进行传输(提出问题:如果是发送方掉线的情况下应该如何处
理?)。如果 A 在第 10 次传输时发现 B 掉线(很可能 B 是在传输了 2KB 的时候掉线),
杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料
基于 J2EE S2SH 架构的仿腾讯 QQ 的即时通讯系统项目——详细设计说明 书(第 1 部分)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
江西省南昌市2015-2016学年度第一学期期末试卷(江西师大附中使用)高三理科数学分析一、整体解读试卷紧扣教材和考试说明,从考生熟悉的基础知识入手,多角度、多层次地考查了学生的数学理性思维能力及对数学本质的理解能力,立足基础,先易后难,难易适中,强调应用,不偏不怪,达到了“考基础、考能力、考素质”的目标。
试卷所涉及的知识内容都在考试大纲的范围内,几乎覆盖了高中所学知识的全部重要内容,体现了“重点知识重点考查”的原则。
1.回归教材,注重基础试卷遵循了考查基础知识为主体的原则,尤其是考试说明中的大部分知识点均有涉及,其中应用题与抗战胜利70周年为背景,把爱国主义教育渗透到试题当中,使学生感受到了数学的育才价值,所有这些题目的设计都回归教材和中学教学实际,操作性强。
2.适当设置题目难度与区分度选择题第12题和填空题第16题以及解答题的第21题,都是综合性问题,难度较大,学生不仅要有较强的分析问题和解决问题的能力,以及扎实深厚的数学基本功,而且还要掌握必须的数学思想与方法,否则在有限的时间内,很难完成。
3.布局合理,考查全面,着重数学方法和数学思想的考察在选择题,填空题,解答题和三选一问题中,试卷均对高中数学中的重点内容进行了反复考查。
包括函数,三角函数,数列、立体几何、概率统计、解析几何、导数等几大版块问题。
这些问题都是以知识为载体,立意于能力,让数学思想方法和数学思维方式贯穿于整个试题的解答过程之中。
二、亮点试题分析1.【试卷原题】11.已知,,A B C 是单位圆上互不相同的三点,且满足AB AC →→=,则AB AC →→⋅的最小值为( )A .14-B .12-C .34-D .1-【考查方向】本题主要考查了平面向量的线性运算及向量的数量积等知识,是向量与三角的典型综合题。
解法较多,属于较难题,得分率较低。
【易错点】1.不能正确用OA ,OB ,OC 表示其它向量。
2.找不出OB 与OA 的夹角和OB 与OC 的夹角的倍数关系。
【解题思路】1.把向量用OA ,OB ,OC 表示出来。
2.把求最值问题转化为三角函数的最值求解。
【解析】设单位圆的圆心为O ,由AB AC →→=得,22()()OB OA OC OA -=-,因为1OA OB OC ===,所以有,OB OA OC OA ⋅=⋅则()()AB AC OB OA OC OA ⋅=-⋅-2OB OC OB OA OA OC OA =⋅-⋅-⋅+ 21OB OC OB OA =⋅-⋅+设OB 与OA 的夹角为α,则OB 与OC 的夹角为2α所以,cos 22cos 1AB AC αα⋅=-+2112(cos )22α=--即,AB AC ⋅的最小值为12-,故选B 。
【举一反三】【相似较难试题】【2015高考天津,理14】在等腰梯形ABCD 中,已知//,2,1,60AB DC AB BC ABC ==∠= ,动点E 和F 分别在线段BC 和DC 上,且,1,,9BE BC DF DC λλ==则AE AF ⋅的最小值为 .【试题分析】本题主要考查向量的几何运算、向量的数量积与基本不等式.运用向量的几何运算求,AE AF ,体现了数形结合的基本思想,再运用向量数量积的定义计算AE AF ⋅,体现了数学定义的运用,再利用基本不等式求最小值,体现了数学知识的综合应用能力.是思维能力与计算能力的综合体现. 【答案】2918【解析】因为1,9DF DC λ=12DC AB =,119199918CF DF DC DC DC DC AB λλλλλ--=-=-==, AE AB BE AB BC λ=+=+,19191818AF AB BC CF AB BC AB AB BC λλλλ-+=++=++=+,()221919191181818AE AF AB BC AB BC AB BC AB BCλλλλλλλλλ+++⎛⎫⎛⎫⋅=+⋅+=+++⋅⋅ ⎪ ⎪⎝⎭⎝⎭19199421cos1201818λλλλ++=⨯++⨯⨯⨯︒2117172992181818λλ=++≥+= 当且仅当2192λλ=即23λ=时AE AF ⋅的最小值为2918. 2.【试卷原题】20. (本小题满分12分)已知抛物线C 的焦点()1,0F ,其准线与x 轴的交点为K ,过点K 的直线l 与C 交于,A B 两点,点A 关于x 轴的对称点为D . (Ⅰ)证明:点F 在直线BD 上; (Ⅱ)设89FA FB →→⋅=,求BDK ∆内切圆M 的方程. 【考查方向】本题主要考查抛物线的标准方程和性质,直线与抛物线的位置关系,圆的标准方程,韦达定理,点到直线距离公式等知识,考查了解析几何设而不求和化归与转化的数学思想方法,是直线与圆锥曲线的综合问题,属于较难题。
【易错点】1.设直线l 的方程为(1)y m x =+,致使解法不严密。
2.不能正确运用韦达定理,设而不求,使得运算繁琐,最后得不到正确答案。
【解题思路】1.设出点的坐标,列出方程。
2.利用韦达定理,设而不求,简化运算过程。
3.根据圆的性质,巧用点到直线的距离公式求解。
【解析】(Ⅰ)由题可知()1,0K -,抛物线的方程为24y x =则可设直线l 的方程为1x my =-,()()()112211,,,,,A x y B x y D x y -,故214x my y x =-⎧⎨=⎩整理得2440y my -+=,故121244y y m y y +=⎧⎨=⎩则直线BD 的方程为()212221y y y y x x x x +-=--即2222144y y y x y y ⎛⎫-=- ⎪-⎝⎭令0y =,得1214y yx ==,所以()1,0F 在直线BD 上.(Ⅱ)由(Ⅰ)可知121244y y m y y +=⎧⎨=⎩,所以()()212121142x x my my m +=-+-=-,()()1211111x x my my =--= 又()111,FA x y →=-,()221,FB x y →=-故()()()21212121211584FA FB x x y y x x x x m →→⋅=--+=-++=-,则28484,93m m -=∴=±,故直线l 的方程为3430x y ++=或3430x y -+=213y y -===±,故直线BD 的方程330x -=或330x -=,又KF 为BKD ∠的平分线,故可设圆心()(),011M t t -<<,(),0M t 到直线l 及BD 的距离分别为3131,54t t +--------------10分 由313154t t +-=得19t =或9t =(舍去).故圆M 的半径为31253t r +== 所以圆M 的方程为221499x y ⎛⎫-+= ⎪⎝⎭【举一反三】【相似较难试题】【2014高考全国,22】 已知抛物线C :y 2=2px(p>0)的焦点为F ,直线y =4与y 轴的交点为P ,与C 的交点为Q ,且|QF|=54|PQ|.(1)求C 的方程;(2)过F 的直线l 与C 相交于A ,B 两点,若AB 的垂直平分线l′与C 相交于M ,N 两点,且A ,M ,B ,N 四点在同一圆上,求l 的方程.【试题分析】本题主要考查求抛物线的标准方程,直线和圆锥曲线的位置关系的应用,韦达定理,弦长公式的应用,解法及所涉及的知识和上题基本相同. 【答案】(1)y 2=4x. (2)x -y -1=0或x +y -1=0. 【解析】(1)设Q(x 0,4),代入y 2=2px ,得x 0=8p,所以|PQ|=8p ,|QF|=p 2+x 0=p 2+8p.由题设得p 2+8p =54×8p ,解得p =-2(舍去)或p =2,所以C 的方程为y 2=4x.(2)依题意知l 与坐标轴不垂直,故可设l 的方程为x =my +1(m≠0). 代入y 2=4x ,得y 2-4my -4=0. 设A(x 1,y 1),B(x 2,y 2), 则y 1+y 2=4m ,y 1y 2=-4.故线段的AB 的中点为D(2m 2+1,2m), |AB|=m 2+1|y 1-y 2|=4(m 2+1).又直线l ′的斜率为-m ,所以l ′的方程为x =-1m y +2m 2+3.将上式代入y 2=4x ,并整理得y 2+4m y -4(2m 2+3)=0.设M(x 3,y 3),N(x 4,y 4),则y 3+y 4=-4m,y 3y 4=-4(2m 2+3).故线段MN 的中点为E ⎝ ⎛⎭⎪⎫2m2+2m 2+3,-2m ,|MN|=1+1m 2|y 3-y 4|=4(m 2+1)2m 2+1m 2.由于线段MN 垂直平分线段AB ,故A ,M ,B ,N 四点在同一圆上等价于|AE|=|BE|=12|MN|,从而14|AB|2+|DE|2=14|MN|2,即 4(m 2+1)2+⎝ ⎛⎭⎪⎫2m +2m 2+⎝ ⎛⎭⎪⎫2m 2+22=4(m 2+1)2(2m 2+1)m 4,化简得m 2-1=0,解得m =1或m =-1, 故所求直线l 的方程为x -y -1=0或x +y -1=0.三、考卷比较本试卷新课标全国卷Ⅰ相比较,基本相似,具体表现在以下方面: 1. 对学生的考查要求上完全一致。
即在考查基础知识的同时,注重考查能力的原则,确立以能力立意命题的指导思想,将知识、能力和素质融为一体,全面检测考生的数学素养,既考查了考生对中学数学的基础知识、基本技能的掌握程度,又考查了对数学思想方法和数学本质的理解水平,符合考试大纲所提倡的“高考应有较高的信度、效度、必要的区分度和适当的难度”的原则. 2. 试题结构形式大体相同,即选择题12个,每题5分,填空题4 个,每题5分,解答题8个(必做题5个),其中第22,23,24题是三选一题。
题型分值完全一样。
选择题、填空题考查了复数、三角函数、简易逻辑、概率、解析几何、向量、框图、二项式定理、线性规划等知识点,大部分属于常规题型,是学生在平时训练中常见的类型.解答题中仍涵盖了数列,三角函数,立体何,解析几何,导数等重点内容。
3. 在考查范围上略有不同,如本试卷第3题,是一个积分题,尽管简单,但全国卷已经不考查了。
四、本考试卷考点分析表(考点/知识点,难易程度、分值、解题方式、易错点、是否区分度题)。