源码IDEA工程获取连接:Java 聊天室 实战 源码 html
你们好,我是做者尼恩。java
今天是百万级流量 Netty 聊天器 打造的系列文章的第二篇, 设计一个 仿QQ客户端。面试
上一篇中,已经完成了 整个系统的完整模块介绍。app
上一篇的连接为:Java 聊天程序(百万级流量实战一):系统介绍篇分布式
接下来,就须要一个比较高端、大气、上档次的 客户端 UI界面了。ide
对于主要的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 聊天器客户端。他的项目也是开放的和学习型的,因为重写一个客户端,须要挺长时间的,这里先借鉴一下,后续有时间,再从新实现。 this
为了完成百万级的聊天,代码中,仍是有不少须要优化的、升级的地方。.net
后续的文章,专门介绍如何优化。
Java (Netty) 聊天程序【 亿级流量】实战 开源项目实战
Netty 源码、原理、JAVA NIO 原理
Java 面试题 一网打尽
疯狂创客圈 【 博客园 总入口 】