用java编写一个微博登陆页面

上次也写了一个微博登陆页面,不过功能还不够完善。今天重新完善了一些功能,分享出来给大家。

基本功能如下:

(1)具有类似新浪微博的用户注册图形界面.

(2)使用用户名或手机号注册,注册时需要提供新密码和

确认密码。

(3)注册时,用户名重复和手机号重复时能提供提示。

(4)注册时,手机号明显错误时能提供提示,手机号长 度为11

位,并且以 13、15、17、18 开头的号码判断为正确。

(5)程序以应用程序形式实现,不用 web 网页形式实现。

(6)用户数据存储以 HashSet 集合实现。

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 }
运行结果

 

posted @ 2017-10-10 19:51  我从未放弃  阅读(1449)  评论(0编辑  收藏  举报