Netty 聊天器(百万级流量实战二):仿QQ客户端

疯狂创客圈 Java 分布式聊天室【 亿级流量】实战系列之15 【博客园 总入口

源码IDEA工程获取链接Java 聊天室 实战 源码

写在前面

​ 大家好,我是作者尼恩。

今天是百万级流量 Netty 聊天器 打造的系列文章的第二篇, 设计一个 仿QQ客户端。

上一篇中,已经完成了 整个系统的完整模块介绍。

上一篇的链接为:Java 聊天程序(百万级流量实战一):系统介绍篇

接下来,就需要一个比较高端、大气、上档次的 客户端 UI界面了

对于主要的UI界面实现,列表如下:

好友列表


消息发送UI

群消息UI


找人和找群


客户端的启动代码如下:

public class MainDialog extends BaseDialog
{

private static final long serialVersionUID = 1L;

private OnlyPanel topPanel = new OnlyPanel();
private OnlyPanel titlePanel = new OnlyPanel();
private OnlyPanel mainPanel = new OnlyPanel();
private OnlyPanel bottomPanel = new OnlyPanel();

private UserDataPanel userDataPanel = new UserDataPanel();
private TabPanel tabPanel = new TabPanel();

private Root userRoot = new Root();
private Root groupRoot = new Root();
private Root lastRoot = new Root();

public MainDialog()
{
super(new javax.swing.JFrame(), false);
initComponents();
}

/**
* Creates new form MainDialog
*/
public MainDialog(java.awt.Frame parent, boolean modal)
{
super(parent, modal);
initComponents();
initUserList();
}

private void initComponents()
{
this.setSize(280, 630);
this.setMinimumSize(new java.awt.Dimension(280, 530));
// ...
}

public static void main(String args[])
{

try
{
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels())
{
if ("Nimbus".equals(info.getName()))
{
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex)
{
java.util.logging.Logger.getLogger(MainDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex)
{
java.util.logging.Logger.getLogger(MainDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex)
{
java.util.logging.Logger.getLogger(MainDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex)
{
java.util.logging.Logger.getLogger(MainDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}

java.awt.EventQueue.invokeLater(new Runnable()
{
public void run()
{
MainDialog dialog = new MainDialog(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter()
{
@Override
public void windowClosing(java.awt.event.WindowEvent e)
{
System.exit(0);
}
});

Image imaeg = new ImageIcon("Resources/Images/Login/002.jpg").getImage();
BufferedImage bi = new BufferedImage(imaeg.getWidth(null), imaeg.getHeight(null), BufferedImage.TYPE_INT_RGB);

Graphics2D biContext = bi.createGraphics();
biContext.drawImage(imaeg, 0, 0, null);
bi = OnlyImageUtil.applyGaussianFilter(bi, null, 50);
dialog.setBackgroundImage(bi);
dialog.setVisible(true);
}
});
}
}

写在最后

至此为止,终于仿QQ的高大上 UI 客户端介绍。

在这里,致敬和感恩网友夏辉,本实例的UI代码,整合自他的mina 聊天器客户端。他的项目也是开放的和学习型的,由于重写一个客户端,需要挺长时间的,这里先借鉴一下,后续有时间,再重新实现。

​ 为了完成百万级的聊天,代码中,还是有很多需要优化的、升级的地方。

后续的文章,专门介绍如何优化。


疯狂创客圈 实战计划
  • Java (Netty) 聊天程序【 亿级流量】实战 开源项目实战


最新文章

  1. 4. SVM分类器求解(2)
  2. UVa 11987 Almost Union-Find(支持删除操作的并查集)
  3. 深入理解springAOP
  4. Bash:-3次错误输入退出脚本
  5. jquery对url中的中文解码
  6. linux命令之 top, free,ps
  7. 自己封装的android客户端http网络框架
  8. DOM(九)使用DOM设置文本框
  9. Linux Centos 上一些常用的命令
  10. Google实习面试归来
  11. PHP 开启报错机制
  12. 建立企业内部mavenserver并使用Android Studio公布公共项目
  13. mac eclipse svn subeclipse: Failed to load JavaHL Library.
  14. 【C#】Deep copy of objects
  15. angularjs 路由模块
  16. 阿里云服务器linux(cenos)下 jdk、tomcat的安装配置
  17. java学习笔记之String类
  18. laravel 原生 sql
  19. vue.js数据可以在页面上渲染成功却总是警告提示某个字段“undefined”未定义
  20. Spring boot教程mybatis访问MySQL的尝试

热门文章

  1. sqlite 使用
  2. ML | Naive Bayes
  3. JavaScript的变量:变量提升
  4. Cesium 显示CZML数据
  5. WM_SETFOCUS和WM_KILLFOCUS、WM_GETDLGCODE
  6. Opencv 改进的外接矩形合并拼接方法
  7. 彻底搞懂oracle的标量子查询
  8. 从头写一个Cucumber测试(一) Selenium Test
  9. 页面登陆框老是乱乱的?banner跨页图片缩小之后总是在側面不能显示主要部分?哈哈~我来帮你忙~~
  10. mysql主从一致问题