Netty 仿QQ聊天室 (實戰二)


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) 聊天程序【 億級流量】實戰 開源項目實戰



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM