上次也写了一个微博登陆页面,不过功能还不够完善。今天重新完善了一些功能,分享出来给大家。
基本功能如下:
(1)具有类似新浪微博的用户注册图形界面.
(2)使用用户名或手机号注册,注册时需要提供新密码和
确认密码。
(3)注册时,用户名重复和手机号重复时能提供提示。
(4)注册时,手机号明显错误时能提供提示,手机号长
位,并且以
(5)程序以应用程序形式实现,不用
(6)用户数据存储以
1 package com.bloge;
2 public class Weibo {
3 public static void main(String[] ars) {
4 WindowButton win = new WindowButton();
5 win.setBounds(400, 150, 606, 428);
6 win.setTitle("微博");
7 }
8 }
有一些图片是我截图弄来的。如果想显示背景图片和小图标的话,那就自己找图片放上去就可以了。
1 package com.bloge;
2
3 import java.util.*;
4 import javax.swing.*;
5 import java.awt.*;
6 import java.awt.event.*;
7 import java.awt.Font;//字体
8 import java.awt.Color;//颜色
9 import java.util.HashSet;
10
11 public class WindowButton extends JFrame implements ActionListener,
12 FocusListener {
13
14 Box boxV1, boxV2, boxV3, baseBox;// boxV1,boxV2,boxV3均为列式,baseBox为行式
15 JButton button;
16 JMenuBar menubar;
17 JMenu menu1, menu2;
18 JTextField text1; // 手机号的文本域
19 JPasswordField pass1, pass2; // 密码和确认密码的文本域
20 JComboBox<String> comBox;
21
22 // labePhone为手机标签,labe1,labe2,labe3分别为手机、密码、确认密码的提示标签
23 JLabel labePhone, labe1, labe2, labe3;
24 int flag = 0, flag2 = 1; // 标记符
25 HashSet<String> set1 = new HashSet<String>(); // HashSet集合,用于储存号码
26 HashSet<String> set2 = new HashSet<String>(); // HashSet集合,用于储存密码
27
28 WindowButton() {
29 addWindowListener(new WindowAdapter() { // 匿名类的实例监视窗口事件
30 public void windowClosing(WindowEvent e) {
31 dispose();
32 }
33 });
34
35 setLayout(new FlowLayout());
36 setVisible(true);
37
38 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
39 setResizable(false); // 设置框架不可以改变大小
40
41 menubar = new JMenuBar();
42 menu1 = new JMenu("个人注册");
43 menu2 = new JMenu("邮箱注册");
44 menubar.add(menu1); // 向菜单条里添加菜单
45 menubar.add(menu2);
46 setJMenuBar(menubar);
47
48 Toolkit tk = Toolkit.getDefaultToolkit(); // 设置窗口图标
49 Image imge = tk.getImage("src\\Img\\20.png");
50 setIconImage(imge);
51
52 Icon icon1 = new ImageIcon("src\\Img\\520.png"); // 手机图标的图片
53
54 boxV1 = Box.createVerticalBox(); // 列型盒式布局
55 boxV1.add(new JLabel("来自"));
56 boxV1.add(Box.createVerticalStrut(15));
57 labePhone = new JLabel("手机");
58 labePhone.setIcon(icon1);
59
60 labePhone.setFont(new Font("宋体", 1, 12));// 设置标签字体
61 // labePhone.setForeground(Color.yellow);
62
63 boxV1.add(labePhone);
64 // 垂直支撑,可以得到一个不可见的垂直Strut对象
65 boxV1.add(Box.createVerticalStrut(15));
66
67 boxV1.add(new JLabel("设置密码"));
68 boxV1.add(Box.createVerticalStrut(15));
69 boxV1.add(new JLabel("确认密码"));
70 boxV2 = Box.createVerticalBox(); // 列型盒式布局
71 boxV2.add(Box.createVerticalStrut(35));
72
73 comBox = new JComboBox<String>();
74 comBox.addItem("中国");
75 comBox.addItem("美国");
76 comBox.addItem("加拿大");
77 comBox.addItem("巴西");
78 comBox.addItem("马来西亚");
79 comBox.addItem("日本");
80 comBox.addItem("韩国");
81 comBox.addItem("英国");
82 comBox.addItem("法国");
83 comBox.addItem("印度");
84 comBox.addItem("德国");
85 comBox.addItem("越南");
86 add(comBox);
87 boxV2.add(comBox);
88
89 text1 = new JTextField(10); // 输入手机号的文本域
90 pass1 = new JPasswordField();
91 pass2 = new JPasswordField();
92
93 boxV2.add(Box.createVerticalStrut(10));
94 boxV2.add(text1); // 第一行,手机
95
96 text1.addFocusListener(this); // 为手机注册焦点事件,手机号
97 pass1.addFocusListener(this);
98 pass2.addFocusListener(this);
99
100 boxV2.add(Box.createVerticalStrut(10));
101 boxV2.add(pass1);
102 boxV2.add(Box.createVerticalStrut(10));
103 boxV2.add(pass2);
104
105 boxV2.add(Box.createVerticalStrut(10));
106 button = new JButton("立即注册");
107 boxV2.add(button);
108
109 button.addActionListener(this); // 注册监听器,button为事件源,this为监听器
110
111 labe1 = new JLabel("");
112 labe2 = new JLabel("");
113 labe3 = new JLabel("");
114
115 boxV3 = Box.createVerticalBox(); // 列型盒式布局
116 boxV3.add(Box.createVerticalStrut(35));
117 boxV3.add(labe1);
118 boxV3.add(Box.createVerticalStrut(15));
119 boxV3.add(labe2);
120 boxV3.add(Box.createVerticalStrut(15));
121 boxV3.add(labe3);
122
123 baseBox = Box.createHorizontalBox(); // 列型盒式布局
124 baseBox.add(boxV1);
125 baseBox.add(Box.createHorizontalStrut(18));
126 baseBox.add(boxV2);
127 baseBox.add(Box.createHorizontalStrut(18));
128 baseBox.add(boxV3);
129 add(baseBox);
130
131 labe1.setText(" "
132 + " "); // 手机提示标签
133
134 ImageIcon img = new ImageIcon("src\\Img\\gg.jpg");// 设置背景图片
135
136 JLabel imgLabel = new JLabel(img);// 将背景图放在标签里。
137 // 将背景标签添加到jfram的LayeredPane面板里。
138 getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));
139 // 设置背景标签的位置
140 imgLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
141
142 Container contain = this.getContentPane();
143 // 将内容面板设为透明。将LayeredPane面板中的背景显示出来。
144 ((JPanel) contain).setOpaque(false);
145
146 validate(); // 刷新
147 }
148
149 public void focusGained(FocusEvent e) { // 无输入焦点变为有输入焦点
150 if (e.getSource() == text1) {
151
152 Icon icon2 = new ImageIcon("src\\Img\\h1.png");
153 labe1.setText("请输入手机号! ");
154 labe1.setFont(new Font("宋体", 0, 12));// 设置标签字体
155 labe1.setForeground(Color.blue);
156 labe1.setIcon(icon2);
157 }
158 if (e.getSource() == pass1) {
159 // labe2.setText(" ");
160 Icon icon2 = new ImageIcon("src\\Img\\h1.png");
161 labe2.setText("请输入密码!");
162 labe2.setFont(new Font("宋体", 0, 12));// 设置标签字体
163 labe2.setForeground(Color.blue);
164 labe2.setIcon(icon2);
165 }
166 if (e.getSource() == pass2) {
167 // labe3.setText(" ");
168 Icon icon2 = new ImageIcon("src\\Img\\h1.png");
169 labe3.setText("请确认密码!");
170 labe3.setFont(new Font("宋体", 0, 12));// 设置标签字体
171 labe3.setForeground(Color.blue);
172 labe3.setIcon(icon2);
173 }
174
175 }
176
177 public void focusLost(FocusEvent e) { // 有输入焦点变为无输入焦点
178
179 try {
180
181 if (e.getSource() == text1) {
182 // labe1.setText("请输入密码!");
183 String str = String.valueOf(text1.getText()); // 将数字转化为字符串
184 String[] str1 = new String[str.length()];
185
186 for (int i = 0; i < str.length(); i++) {
187 str1[i] = str.substring(i, i + 1); // 截取
188 }
189
190 set1.add("13458351110");
191 set1.add("17934558544");
192 set1.add("13435455522");
193 set1.add("14795823333");
194 set1.add("15977178388");
195
196 // 构造迭代器,用iterator()进行遍历
197 Iterator<String> te = set1.iterator();
198 while (te.hasNext()) {
199 if (str.equals(te.next())) {
200 str = "8888";
201
202 }
203
204 }
205
206 if (str1[0].equals("1")) { // 必须用equals比较
207 if ((str1[1].equals("0") || str1[1].equals("1")
208 || str1[1].equals("2") || str1[1].equals("6") || str1[1]
209 .equals("9"))
210 || ((text1.getText().length()) != 11)) {
211
212 Icon icon3 = new ImageIcon("src\\Img\\h2.png");
213 labe1.setText("请输入开头为13,14,15,17,18的号码,且为11位!");
214 labe1.setFont(new Font("宋体", 0, 12));// 设置标签字体
215 labe1.setForeground(Color.red);
216 labe1.setIcon(icon3);
217 flag = 0;
218 } else if (str.equals("8888")) { // text1.getText().equals("1111")
219 JOptionPane.showMessageDialog(null, "该手机号已被注册!"); // 弹出消息框
220 Icon icon3 = new ImageIcon("src\\Img\\h2.png");
221 labe1.setText("手机号码重复! ");
222 labe1.setIcon(icon3);
223 flag = 0;
224 flag2 = 1;
225 } else {
226 Icon icon3 = new ImageIcon("src\\Img\\g1.png");
227 // 手机号码正确,只显示正确的那个图标
228 labe1.setText(" ");
229 labe1.setIcon(icon3);
230 flag = 1;
231 }
232 } else {
233 Icon icon3 = new ImageIcon("src\\Img\\h2.png");
234 labe1.setText("请输入开头为13,14,15,17,18的号码,且为11位!");
235 labe1.setFont(new Font("宋体", 0, 12));// 设置标签字体
236 labe1.setForeground(Color.red);
237 labe1.setIcon(icon3);
238 flag = 0;
239 }
240 }
241
242 String s = String.valueOf(pass1.getPassword()); // 将数字转换成字符串
243 if (e.getSource() == pass1) {
244 if ((s.length() < 5 && s.length() > 0) || s.length() > 12) {
245 JOptionPane.showMessageDialog(null, "密码长度必须在5~12个字符之内!");
246
247 } else {
248 Icon icon2 = new ImageIcon("src\\Img\\g1.png"); // 第一个密码成功图标
249 labe2.setText(" ");
250 labe2.setIcon(icon2);
251 }
252 }
253
254 } catch (Exception ee) {
255 // System.out.println(ee1);
256 }
257
258 }
259
260 public void actionPerformed(ActionEvent e) {
261 if (e.getSource() == button) {
262
263 try {
264 // String str = String.valueOf(text1.getText()); //将数字转化为字符串
265 String str2 = String.valueOf(pass1.getPassword());
266 String str3 = String.valueOf(pass2.getPassword());
267
268 if (!(str2.equals(str3))) {
269 Icon icon2 = new ImageIcon("src\\Img\\h1.png");
270 labe3.setText("密码正确!");
271 labe3.setFont(new Font("宋体", 0, 12));// 设置标签字体
272 labe3.setForeground(Color.blue);
273 labe3.setIcon(icon2);
274
275 JOptionPane.showMessageDialog(null, "两次密码不一致");
276 } else if (str2.equals(str3) && flag == 1 && flag2 == 1) {
277 JOptionPane.showMessageDialog(null, "注册成功!");
278 String string1 = String.valueOf(text1.getText());
279 String string2 = String.valueOf(pass2.getPassword());
280 set1.add(string1); // 向集合中添加注册成功的新号码
281 set2.add(string2); // 向集合中添加注册成功的新密码
282 flag2 = 0;
283 } else {
284 if (flag2 != 0) {
285 JOptionPane.showMessageDialog(null, "请输入正确的手机号!");
286 }
287 }
288 } catch (Exception ee1) {
289 }
290 }
291 }
292 }
运行结果