JAVA入門到精通-第87講-山寨QQ專案1-登入介面
阿新 • • 發佈:2018-12-01
不考慮使用者是否離線的問題;
寫專案之前單開一個工作區:
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頻寬,一個月給電信上千萬費用; 線上影院、線上視訊、都是燒錢網站; 頻寬不夠大,視訊不流暢;
來自為知筆記(Wiz)
寫專案之前單開一個工作區:
File-switch workspace
view 介面 model 後臺 tools 工具類 common 客戶端/伺服器公用的一些類 model層可能根據業務不同再分類
--QQ登入介面
image資料夾
處理北面佈局
設定快捷鍵:keys-Content Assist
ImageIcon
處理介面南部south
---------------- --處理中部
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)