论坛首页 Java企业应用论坛

SwingQQ详解

浏览 31709 次
锁定老帖子 主题:SwingQQ详解
精华帖 (0) :: 良好帖 (8) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2015-03-01   最后修改:2015-03-02

、、、汗、第一次发帖,发了3遍都没成功哭、、、

 

出于对UI比较感兴趣,忙中偷闲,尝试着用Swing模仿了一下QQ,实现了简单的聊天添加删除修改群组添加删除好友

收到消息头像闪烁,可以发送文字(样式)和图片业余之作还请各位大神不要喷,只是想自己记录一下顺便帮助一下其 

他朋友,时间紧凑并且我编码水平不太好,代码看起来可能会比较杂乱无章,希望大家多多包涵,毕竟Swing用的太少了,碰到

了许多问题和困难,也是多方查资料和请教,借鉴了一些前辈高人的项目经验,如:IQQ等,在此,感谢所有帮助过我的朋友

 

服务器:使用Netty构建,负责消息的接收和转发,初衷是考虑到高并发(其实自己玩玩也没多大并发量),Mina和Netty

              都是非常好的高并发框架,选择了Netty是考虑到他是一个新生儿,比Mina更有活力潜力(当然,并不是说Mina

              不好),据说两者皆可以达到普通电脑单台并发10万(没亲自尝试过,这数据也是在网上知道的)

 

客户端:使用Swing技术,选择这个是因为Java用的比较多,上班的时候也没时间来学习新技术,这里主要难点就是界面

              的优化,有一大半的时间都花在了优化界面上(为什么这么困难呢:API没有深入去看;百度资料难找),有时

             间会重新开贴将我遇到的一些界面优化难点来讲解一下,以便有需要的朋友

 

数据库:使用的是Oracle数据库(这个没问题,想改就改),这里没有采用任何框架,正好也是自己想复习一下JDBC(框

              架用多了,基础的东西忘记了)

 

好了,不多说了,直接上图。。。

 

Tips:1、所有的界面都是重绘过的

          2、登陆界面、注册界面、主界面都是继承自JDialog而非JFrame,众所周知,JFrame是用的最多的,但是我们既然

               要模仿QQ那就要模仿的像一点儿,QQ登陆以及登陆之后都只有一个系统托盘图标而没有任务栏图标,可能大家

               没接触过的话会感到很神奇,JFrame是一定有任务栏图标的,开始尝试着使用过JWindow,但是JWindow有一个

               很不好的地方,他在焦点获取方面成很大难题,所以,小小JDialog撑起一片天啊

          3、项目中的Dialog是我自己写的一个,很丑,但是用着还可以,基本功能都有(提示框、确认框),而且还可以拓展

               为QQ新闻那种右下角提示

 

登录界面:当时纠结了一下的地方是鼠标进入文字,文字样式变为下划线,因为Java本身没有提供下划线的这种文字样式 (

                 还是我太笨没找到),所以采用了HTML的语法,毕竟Swing是支持其语法的,至于你们所看到漂亮的按钮和复选框,

                 那是我自己找的图片(使用Java本身的绘图技术也可以做到,我这里为了图简单,并且性能也会更好一点),大家

                 在做web项目的时候估计都用过复选框这个控件,它里面可以让你点击复选框后面的文字即可选中复选框,我们这里

                 没有这个属性,只要自己动手写一下,这样可以有更好的用户体验


 


 

 

注册界面:只有界面优化以及按钮滑入出现边框(大家一看就知道),就不多说了

 

Tips:可以看到自定义弹出框,嘿嘿,还没到丑到无法直视的地步


 

 

 

主界面:这个界面是使用上中下三部分拼接而成,背景是利用图片将jpanel重绘了,因为jpanel是不可以像jlabel一样

              setIcon的,界面优化加布局, 以及Jtree组件的重构,才注册成功的账号拥有默认分组“我的好友”,没有任

              何好友



Tips:昵称、签名、好友昵称、好友签名;

          鼠标滑过分组以及好友节点的时候会呈现黄颜色,而当单击好友节点进行选中的时候则变为橙色,双击则是打开聊天窗口



Tips:没获取到焦点的时候是一串提示语,获得焦点之后出现搜索界面(搜索功能没有写,思路可以给大家提供一下,类似

          QQ那样出现一个搜索面板覆盖掉下面的区域,从搜索框一下单独写一个面板使用cardlayout布局,我这里也是如此,

          当搜索的时候将结果展示到面板上并替换掉当前面板)



Tips:对好友分组进行管理,添加、删除、修改以及添加好友到选中分组(默认分组“我的好友”是不允许修改和删除的),如果

          添加删除分组则需要通过root根节点来reload以下Jtree以便将新分组将入到列表,因为在我的好友上一层其实还有一个root

          节点的,只不过隐藏起来了,而如果是添加删除好友节点,则不需要从root开始,只刷新当前即可



Tips:这里我为了好看加入了三个测试(一个太丑了),删除好友功能没有确认是否将你冲对方的好友列表中移除的确认,会自动

          将你从对方的好友也移除掉(确认很简单,传送消息的时候在消息体中加入一个确认变量为true或false即可)



Tips:群组和最近联系人,滚动条重绘是一大难点兼亮点(个人认为)



Tips:添加好友,界面很丑,多多包涵



Tips:请求发起者和接受者予以不同的提示



Tips:对方同意了之后,自己这里会看到提示,当然,如果你的好友列表是展开状态,不要这个友情提示也无所谓(有朋友可

          能再想,为什么不监听其父节点是否展开,如果展开就不管,为展开就将其展开,这样是可以实现的,但是当好友很多

          的时候展开需要用到循环,这样效率有些低)



Tips:删除分组以及修改分组,当然,删除好友的时候也会有确认提示,以免手误



Tips:界面有少许偷懒,大家莫鄙视


 

 

 

聊天界面:聊天总体控件使用了JFrame而没有采用JDialog,是因为需要随时打开,所以要在任务栏上可视,模仿了QQ的聊天窗

                 口合并效果(虽然我这里很丑,但是效果达到了),JFrame里面嵌套了JTabbedPane,我这里引入了一个开源Jar包

                 WEBLAF里面的WebTabbedPane,因为这个地方的优化耗费了很长时间还没能搞定,总是觉着太丑不好看,所以最

                 后放弃了(大家莫要鄙视,如果大家有好的方法可以指点我一下)



Tips:聊天窗口中难点在于JtextPane的运用(说这个是难点是因为,从jdk1.7开始,竟然没有自动换行这个属性了)、字体样式选

          项优化、表情提示框,字体样式选项框就是jcombox的优化,说来惭愧,到现在都没能实现,若有朋友知道如何处理,还请

          指点一下



Tips:除了截屏和jcombox未能优化之外,其余的都还能简单处理,这里需要注意的是表情的发送,尤其是图文混合的情况下,当时

         在这里纠结了很长一段时间

 

呼呼、总算弄好了,发个帖子还真是困难啊

 

源码已上传到我的百度网盘:http://pan.baidu.com/s/1pJjxI4b,大家可以去下载来运行看看、

Bug肯定还是有的,大家遇到了可以告诉我,还有许多没能搞定的地方,如果有朋友会的也请

告诉我一下,QQ:1347384268,我们共同进步!

 

  • 大小: 227 KB
  • 大小: 189.7 KB
  • 大小: 167.3 KB
  • 大小: 93.2 KB
  • 大小: 221.8 KB
  • 大小: 220.4 KB
  • 大小: 52.6 KB
  • 大小: 54.6 KB
  • 大小: 47.7 KB
  • 大小: 54.4 KB
  • 大小: 54.7 KB
  • 大小: 250.7 KB
  • 大小: 267.8 KB
  • 大小: 211 KB
  • 大小: 233.6 KB
  • 大小: 247.5 KB
  • 大小: 80.6 KB
  • 大小: 89.1 KB
   发表时间:2015-03-02  
弄的真不错,,赞
0 请登录后投票
   发表时间:2015-03-02   最后修改:2015-03-02
朋友谬赞了,玩玩可以上,不得台面
0 请登录后投票
   发表时间:2015-03-02  
朋友谬赞了,玩玩可以上,不得台面
0 请登录后投票
   发表时间:2015-03-02  
看起来还阔仪
0 请登录后投票
   发表时间:2015-03-02  
这论坛是咋玩的啊,咋我想回复个消息都回复不了哇,有大神指点没
0 请登录后投票
   发表时间:2015-03-02  
楼主,圆角好看些
0 请登录后投票
   发表时间:2015-03-02  
ahack 写道
楼主,圆角好看些

多谢朋友您的建议,我认为直角也还好看呢,现在的一些软件都是经历过这样的过程,开始都是圆角,现在像360还有一些软件都也是做成直角了,我这里估计是边框没有虚化,不然看起来就没这么别扭了
0 请登录后投票
   发表时间:2015-03-02  
注意点字体、字号就更完美了...
0 请登录后投票
   发表时间:2015-03-02  
iqeq00 写道
注意点字体、字号就更完美了...

嘿嘿,是的呢,有时间了再优化优化
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics