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 面試題 一網打盡
瘋狂創客圈 【 博客園 總入口 】
