转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> JAVA开发 >> 正文
用定制的GUI开发Java聊天软件         ★★★★

用定制的GUI开发Java聊天软件

作者:闵涛 文章来源:闵涛的学习笔记 点击数:891 更新时间:2009/4/22 23:29:39
1fe5 天极软件专题专区精选 Google专区 POPO专区 QQ专区 Flash MX 视频教程 Photoshop视频教程 网页设计视频教程 PowerPoint动画演示教程 Excel动画教程集 Word动画演示教程 特洛伊木马专区 黑客知识教程专区 注册表应用专区 Windows API开发专区 网络编程专区 VB数据库编程专区 图像与多媒体编程 Windows Vista应用专区 防火墙应用专区
  下载本文源代码

  摘要:本文详细介绍一个AWT版本的java聊天软件的开发过程,并着重分析如何用AWT组件实现软件的个性化界面。

  简介

  本Java聊天软件,纯粹基于AWT组件,没有使用任何Swing组件。在本程序中,我开发了自己的Tab控件和图像画布并给出完整的源码分析。软件实现界面见下图:


  软件特点

  1)用本文传递笑脸图片

  2)私人聊天功能
 
  3)基于定制颜色的良好界面

  4)音频功能

  描述

  在软件中,实现了服务器端模块与客户端模块。在服务器端,我定义了自己的RFC命令。在该应用程序中用到的命令有:

  HELO - 初始化到服务器的连接

  QUIT - 用户退出聊天室

  KICK - 禁止参预聊天

  CHRO - 更换聊天室

  MESS - 发送普通信息

  PRIV - 发送私人信息

  ROCO - 取得指定聊天室的聊天人数

  CALL - 邀请语音聊天(本文示例中没有包括)

  服务器端模块设计

  在本模块中,我想解释以下几点:

  ·建立一个定制的UserObject类,该类包含了如用户名,用户套接字,聊天室名称等等详细的客户端信息。

  ·当服务器端运行时,它在端口1436(当然我们也可以修改)开通服务器端套接字,听候客户端的连接。如果客户连接上服务器,它将开通一个独立的服务线程。这样,当客户发送"QUIT"命令时,它就会关掉该线程。详见源文件ChatCommunication.java中的细节编程。

  下面的示例代码实现了从聊天室客户端获取连接并创建一个新的ChatCommunication对象的功能。在类ChatCommunication中,我们将创建一个专门线程来负责监守来自客户端的所有命令并作出相应的回答。

//ChatServer.java
…………
while(true)
{
 Socket socket = serversocket.accept();
 ChatCommunication chat = new ChatCommunication(socket);
}
.........
//ChatCommunication.java
..........
ChatCommuncation(Socket socket)
{
 personalsocket = sokcet;
 dout = new Dataoutputstream(personalsocket.getoutoutstream());
 .....
}
  客户端模块设计

  在本模块中,我想解释以下几点:

  ·当客户端运行时,它开通一个套接字并通过发送 HELO RFC给服务器与ChatServer 建立连接。一旦连接上,客户端将一直保持该套接字的连接和与服务器的通信,无论用户在什么时候发送命令。

  ·关于用户接口的设计。我建立了定制的Tab组件和Image支持的消息画布。

  ·创建消息画布的基本逻辑较简单些:无论用户什么时候输入消息,我都把该消息存储到一个数组列表中。而且,在这个列表中,我保留了每条消息的X和Y的偏移位置。详见下面的源码解释:

//Ex:
...........
for(int i =0; i < messagearraylist.size();i++)
{
 PaintMessageToMessageCanvas((MessageObject)messagearraylist.get(i);
}.........
/**************************************************************
下面函数用来绘制图像和文本消息
**************************************************************/
private void PaintMessageIntoCanvas(MessageObject messageObject)
{
 int m_YPos = messageobject.StartY - YOffset;
 int m_XPos = 5 - XOffset;
 int CustomWidth = 0;
 String Message = messageobject.Message;
 /*************以用户名字体打印出用户名 **************/
 if(Message.indexOf(":") >= 0)
 {
  graphics.setFont(UserNameFont);
  chatclient.getGraphics().setFont(UserNameFont);
  fontmetrics = chatclient.getGraphics().getFontMetrics();
  String m_UserName = Message.substring(0,Message.indexOf(":")+1);
  graphics.drawString(m_UserName,m_XPos+CustomWidth,m_YPos);
  CustomWidth+=fontmetrics.stringWidth(m_UserName)+HorizantalSpace;
  Message = Message.substring(Message.indexOf(":")+1);
 }

 /*********设置文本的字体**********/
 chatclient.getGraphics().setFont(TextFont);
 graphics.setFont(TextFont);
 fontmetrics = chatclient.getGraphics().getFontMetrics();

 /**********打印图像区域********/
 if(messageobject.IsImage == true)
 {
  tokenizer = new StringTokenizer(Message," ");
  while(tokenizer.hasMoreTokens())
  {
   TokenString = tokenizer.nextToken();
   if(TokenString.indexOf("~~") >= 0)
   {
    /********如果是正确的图像*************/
    try {
     int m_ImageIndex = Integer.parseInt(TokenString.substring(2));
     if((m_ImageIndex >= 0) && (m_ImageIndex < chatclient.IconCount))
     {
      graphics.drawImage(chatclient.IconArray[m_ImageIndex]
        ,m_XPos+CustomWidth,m_YPos - 15,messageobject.Width,messageobject.Height,this);
      CustomWidth+=messageobject.Width+HorizantalSpace;
     }
    }
    catch(Exception _Exc) { }
   }
   else
   {
    graphics.drawString(TokenString,m_XPos+CustomWidth,m_YPos);
    CustomWidth+=fontmetrics.stringWidth(TokenString)+HorizantalSpace;
   }
   if(TotalWidth < m_XPos+CustomWidth)
   {
    TotalWidth = m_XPos+CustomWidth;
    scrollview.setValues(TotalWidth,TotalHeight);
   }
  .................
}

157


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台