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) 聊天程序【 億級流量】實戰 開源項目實戰
Netty 源碼、原理、JAVA NIO 原理
Java 面試題 一網打盡
瘋狂創客圈 【 博客園 總入口 】