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
//把控制按顺序加入jp289
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,jp4100
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
//把三个按钮放到jp1119
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



浙公网安备 33010602011771号