1. 程式人生 > >JAVA入門到精通-第87講-山寨QQ專案1-登入介面

JAVA入門到精通-第87講-山寨QQ專案1-登入介面

不考慮使用者是否離線的問題;

寫專案之前單開一個工作區:

File-switch workspace

view      介面 model   後臺 tools      工具類 common  客戶端/伺服器公用的一些類 model層可能根據業務不同再分類
--QQ登入介面
JLable; 中間網格佈局;選項卡視窗; 最南面,Panel上面放了幾個按鈕;JPanel放在最南面,流佈局;


image資料夾
處理北面佈局
設定快捷鍵:keys-Content Assist

ImageIcon
處理介面南部south

---------------- --處理中部
中間可能有3個Panel,有一個選項卡視窗管理, 通過選項卡不停地切換; JTabbedPane 選項卡
jp2放網格佈局;9個JLabel;
處理4個JLabel:  QQ號碼、QQ密碼、忘記密碼、申請密碼保護
-輸入框、密碼框、2個checkbox
-把控制元件按照順序加入到jp2裡面去; QQ號碼、輸入框;清楚密碼; QQ密碼、密碼框;忘記密碼;


--建立選項卡視窗 jtp=new  JTabbedPane(); jtp.add('QQ號碼',jp2);
最後,加在中間的是 jtp ,而不是 JPanel


在JPanel上是居中佈局;稍微好看一點點;
修改前景色:
jp2_jbl3.setForeground(Color.blue); ----------------------
賬號、密碼需要到伺服器去驗證: 賬號、密碼 是存在伺服器上的;伺服器決定QQ是否合法;
400G頻寬,一個月給電信上千萬費用; 線上影院、線上視訊、都是燒錢網站; 頻寬不夠大,視訊不流暢;

Client端原始碼

com.qq.client.view

[QqClientLogin.java]

  1
/**
2
 * 功能:QQ客戶端登陸介面
3
 */
4
package com.qq.client.view;
5
 
6
import java.awt.Color;
7
import java.awt.Cursor;
8
import java.awt.FlowLayout;
9
import java.awt.GridLayout;
10
import java.awt.event.ActionEvent;
11
import java.awt.event.ActionListener;
12
import java.io.IOException;
13
import java.io.ObjectOutputStream;
14
import javax.swing.ImageIcon;
15
import javax.swing.JButton;
16
import javax.swing.JCheckBox;
17
import javax.swing.JFrame;
18
import javax.swing.JLabel;
19
import javax.swing.JOptionPane;
20
import javax.swing.JPanel;
21
import javax.swing.JPasswordField;
22
import javax.swing.JTabbedPane;
23
import javax.swing.JTextField;
24
import javax.swing.UIManager;
25
import com.qq.client.model.QqClientUser;
26
import com.qq.client.tools.ManageClientConServerThread;
27
import com.qq.client.tools.ManageQqFriendList;
28
import com.qq.common.Message;
29
import com.qq.common.MessageType;
30
import com.qq.common.User;
31
 
32
public class QqClientLogin extends JFrame implements ActionListener{
33
    //定義北部需要的元件
34
    JLabel jbl1;
35
    //定義中部需要的元件
36
    //中部有三個JPanel,有一個叫選項卡視窗管理
37
    JTabbedPane jtp;
38
    JPanel jp2,jp3,jp4;
39
    JLabel jp2_jbl1,jp2_jbl2,jp2_jbl3,jp2_jbl4;
40
    JButton jp2_jb1;
41
    JTextField jp2_jtf;
42
    JPasswordField jp2_jpf;
43
    JCheckBox jp2_jcb1,jp2_jcb2;
44
   
45
    //定義南部需要的元件
46
    JPanel jp1;
47
    JButton jp1_jb1,jp1_jb2,jp1_jb3;
48
    public static void main(String[] args) {
49
        try {
50
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
51
        } catch (Exception e) {
52
            e.printStackTrace();
53
        }
54
        new QqClientLogin();
55
    }
56
   
57
    public void initNorthLayout(){
58
        //處理北部
59
        jbl1=new JLabel(new ImageIcon("image/qqview.jpg"));
60
    }
61
   
62
    public void initCenterLayout(){
63
        //處理中部
64
        jp2=new JPanel();
65
        jp2.setLayout(null);
66
        jp2_jbl1=new JLabel("QQ號碼:");
67
        jp2_jbl1.setBounds(30, 15, 60, 25);
68
        jp2_jbl2=new JLabel("QQ密碼:");
69
        jp2_jbl2.setBounds(30, 50, 60, 25);
70
        jp2_jbl3=new JLabel("忘記密碼");
71
        jp2_jbl3.setForeground(Color.blue);
72
        jp2_jbl3.setBounds(260, 50, 80, 25);
73
        jp2_jbl3.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
74
        jp2_jbl4=new JLabel("<html><u>申請密碼保護</u><html>");
75
        jp2_jbl4.setForeground(Color.blue);
76
        jp2_jbl4.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
77
        jp2_jbl4.setBounds(250, 85, 100, 25);
78
        jp2_jb1=new JButton("清除號碼");
79
        jp2_jb1.setBounds(245, 15, 80, 25);
80
        jp2_jtf=new JTextField();
81
        jp2_jtf.setBounds(80, 15, 150, 25);
82
        jp2_jpf=new JPasswordField();
83
        jp2_jpf.setBounds(80, 50, 150, 25);
84
        jp2_jcb1=new JCheckBox("隱身登入");
85
        jp2_jcb1.setBounds(75, 85, 80, 25);
86
        jp2_jcb2=new JCheckBox("記住密碼");
87
        jp2_jcb2.setBounds(155, 85, 80, 25);
88
        //把控制按順序加入jp2
89
        jp2.add(jp2_jbl1);
90
        jp2.add(jp2_jtf);
91
        jp2.add(jp2_jb1);
92
        jp2.add(jp2_jbl2);
93
        jp2.add(jp2_jpf);
94
        jp2.add(jp2_jbl3);
95
        jp2.add(jp2_jcb1);
96
        jp2.add(jp2_jcb2);
97
        jp2.add(jp2_jbl4);
98
       
99
        //jp3,jp4
100
        jp3=new JPanel();
101
        jp4=new JPanel();
102
       
103
        //建立選項卡視窗
104
        jtp=new JTabbedPane();
105
        jtp.add(jp2,"QQ號碼");
106
        jtp.add(jp3,"手機號碼");
107
        jtp.add(jp4,"電子郵件");
108
    }
109
   
110
    public void initSouthLayout(){
111
        //處理南部
112
        jp1=new JPanel();
113
        jp1_jb1=new JButton("登入");
114
        jp1_jb1.addActionListener(this);
115
        jp1_jb2=new JButton("取消");
116
        jp1_jb2.addActionListener(this);
117
        jp1_jb3=new JButton("註冊");
118
        //把三個按鈕放到jp1
119
        jp1.add(jp1_jb1);
120
        jp1.add(jp1_jb2);
121
        jp1.add(jp1_jb3);
122
    }
123
   
124
    //建構函式
125
    public QqClientLogin(){
126
        //佈局北部
127
        this.initNorthLayout();
128
        //佈局中部
129
        this.initCenterLayout();
130
        //佈局南部
131
        this.initSouthLayout();
132
       
133
        this.add(jbl1,"North");
134
        this.add(jtp,"Center");
135
        this.add(jp1,"South");
136
       
137
        this.setTitle("QQ登入介面");
138
        this.setResizable(false);
139
        this.setSize(350, 300);
140
        this.setLocationRelativeTo(null);
141
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
142
        this.setVisible(true);
143
    }
144
 











來自為知筆記(Wiz)