用java编写一个微博登陆页面
上次也写了一个微博登陆页面,不过功能还不够完善。今天重新完善了一些功能,分享出来给大家。
基本功能如下:
(1)具有类似新浪微博的用户注册图形界面.
(2)使用用户名或手机号注册,注册时需要提供新密码和
确认密码。
(3)注册时,用户名重复和手机号重复时能提供提示。
(4)注册时,手机号明显错误时能提供提示,手机号长 度为11
位,并且以 13、15、17、18 开头的号码判断为正确。
(5)程序以应用程序形式实现,不用 web 网页形式实现。
(6)用户数据存储以 HashSet 集合实现。
package com.bloge;
public class Weibo {
public static void main(String[] ars) {
WindowButton win = new WindowButton();
win.setBounds(400, 150, 606, 428);
win.setTitle("微博");
}
}
有一些图片是我截图弄来的。如果想显示背景图片和小图标的话,那就自己找图片放上去就可以了。
package com.bloge; import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Font;//字体
import java.awt.Color;//颜色
import java.util.HashSet; public class WindowButton extends JFrame implements ActionListener,
FocusListener { Box boxV1, boxV2, boxV3, baseBox;// boxV1,boxV2,boxV3均为列式,baseBox为行式
JButton button;
JMenuBar menubar;
JMenu menu1, menu2;
JTextField text1; // 手机号的文本域
JPasswordField pass1, pass2; // 密码和确认密码的文本域
JComboBox<String> comBox; // labePhone为手机标签,labe1,labe2,labe3分别为手机、密码、确认密码的提示标签
JLabel labePhone, labe1, labe2, labe3;
int flag = 0, flag2 = 1; // 标记符
HashSet<String> set1 = new HashSet<String>(); // HashSet集合,用于储存号码
HashSet<String> set2 = new HashSet<String>(); // HashSet集合,用于储存密码 WindowButton() {
addWindowListener(new WindowAdapter() { // 匿名类的实例监视窗口事件
public void windowClosing(WindowEvent e) {
dispose();
}
}); setLayout(new FlowLayout());
setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false); // 设置框架不可以改变大小 menubar = new JMenuBar();
menu1 = new JMenu("个人注册");
menu2 = new JMenu("邮箱注册");
menubar.add(menu1); // 向菜单条里添加菜单
menubar.add(menu2);
setJMenuBar(menubar); Toolkit tk = Toolkit.getDefaultToolkit(); // 设置窗口图标
Image imge = tk.getImage("src\\Img\\20.png");
setIconImage(imge); Icon icon1 = new ImageIcon("src\\Img\\520.png"); // 手机图标的图片 boxV1 = Box.createVerticalBox(); // 列型盒式布局
boxV1.add(new JLabel("来自"));
boxV1.add(Box.createVerticalStrut(15));
labePhone = new JLabel("手机");
labePhone.setIcon(icon1); labePhone.setFont(new Font("宋体", 1, 12));// 设置标签字体
// labePhone.setForeground(Color.yellow); boxV1.add(labePhone);
// 垂直支撑,可以得到一个不可见的垂直Strut对象
boxV1.add(Box.createVerticalStrut(15)); boxV1.add(new JLabel("设置密码"));
boxV1.add(Box.createVerticalStrut(15));
boxV1.add(new JLabel("确认密码"));
boxV2 = Box.createVerticalBox(); // 列型盒式布局
boxV2.add(Box.createVerticalStrut(35)); comBox = new JComboBox<String>();
comBox.addItem("中国");
comBox.addItem("美国");
comBox.addItem("加拿大");
comBox.addItem("巴西");
comBox.addItem("马来西亚");
comBox.addItem("日本");
comBox.addItem("韩国");
comBox.addItem("英国");
comBox.addItem("法国");
comBox.addItem("印度");
comBox.addItem("德国");
comBox.addItem("越南");
add(comBox);
boxV2.add(comBox); text1 = new JTextField(10); // 输入手机号的文本域
pass1 = new JPasswordField();
pass2 = new JPasswordField(); boxV2.add(Box.createVerticalStrut(10));
boxV2.add(text1); // 第一行,手机 text1.addFocusListener(this); // 为手机注册焦点事件,手机号
pass1.addFocusListener(this);
pass2.addFocusListener(this); boxV2.add(Box.createVerticalStrut(10));
boxV2.add(pass1);
boxV2.add(Box.createVerticalStrut(10));
boxV2.add(pass2); boxV2.add(Box.createVerticalStrut(10));
button = new JButton("立即注册");
boxV2.add(button); button.addActionListener(this); // 注册监听器,button为事件源,this为监听器 labe1 = new JLabel("");
labe2 = new JLabel("");
labe3 = new JLabel(""); boxV3 = Box.createVerticalBox(); // 列型盒式布局
boxV3.add(Box.createVerticalStrut(35));
boxV3.add(labe1);
boxV3.add(Box.createVerticalStrut(15));
boxV3.add(labe2);
boxV3.add(Box.createVerticalStrut(15));
boxV3.add(labe3); baseBox = Box.createHorizontalBox(); // 列型盒式布局
baseBox.add(boxV1);
baseBox.add(Box.createHorizontalStrut(18));
baseBox.add(boxV2);
baseBox.add(Box.createHorizontalStrut(18));
baseBox.add(boxV3);
add(baseBox); labe1.setText(" "
+ " "); // 手机提示标签 ImageIcon img = new ImageIcon("src\\Img\\gg.jpg");// 设置背景图片 JLabel imgLabel = new JLabel(img);// 将背景图放在标签里。
// 将背景标签添加到jfram的LayeredPane面板里。
getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));
// 设置背景标签的位置
imgLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight()); Container contain = this.getContentPane();
// 将内容面板设为透明。将LayeredPane面板中的背景显示出来。
((JPanel) contain).setOpaque(false); validate(); // 刷新
} public void focusGained(FocusEvent e) { // 无输入焦点变为有输入焦点
if (e.getSource() == text1) { Icon icon2 = new ImageIcon("src\\Img\\h1.png");
labe1.setText("请输入手机号! ");
labe1.setFont(new Font("宋体", 0, 12));// 设置标签字体
labe1.setForeground(Color.blue);
labe1.setIcon(icon2);
}
if (e.getSource() == pass1) {
// labe2.setText(" ");
Icon icon2 = new ImageIcon("src\\Img\\h1.png");
labe2.setText("请输入密码!");
labe2.setFont(new Font("宋体", 0, 12));// 设置标签字体
labe2.setForeground(Color.blue);
labe2.setIcon(icon2);
}
if (e.getSource() == pass2) {
// labe3.setText(" ");
Icon icon2 = new ImageIcon("src\\Img\\h1.png");
labe3.setText("请确认密码!");
labe3.setFont(new Font("宋体", 0, 12));// 设置标签字体
labe3.setForeground(Color.blue);
labe3.setIcon(icon2);
} } public void focusLost(FocusEvent e) { // 有输入焦点变为无输入焦点 try { if (e.getSource() == text1) {
// labe1.setText("请输入密码!");
String str = String.valueOf(text1.getText()); // 将数字转化为字符串
String[] str1 = new String[str.length()]; for (int i = 0; i < str.length(); i++) {
str1[i] = str.substring(i, i + 1); // 截取
} set1.add("13458351110");
set1.add("17934558544");
set1.add("13435455522");
set1.add("14795823333");
set1.add("15977178388"); // 构造迭代器,用iterator()进行遍历
Iterator<String> te = set1.iterator();
while (te.hasNext()) {
if (str.equals(te.next())) {
str = "8888"; } } if (str1[0].equals("1")) { // 必须用equals比较
if ((str1[1].equals("0") || str1[1].equals("1")
|| str1[1].equals("2") || str1[1].equals("6") || str1[1]
.equals("9"))
|| ((text1.getText().length()) != 11)) { Icon icon3 = new ImageIcon("src\\Img\\h2.png");
labe1.setText("请输入开头为13,14,15,17,18的号码,且为11位!");
labe1.setFont(new Font("宋体", 0, 12));// 设置标签字体
labe1.setForeground(Color.red);
labe1.setIcon(icon3);
flag = 0;
} else if (str.equals("8888")) { // text1.getText().equals("1111")
JOptionPane.showMessageDialog(null, "该手机号已被注册!"); // 弹出消息框
Icon icon3 = new ImageIcon("src\\Img\\h2.png");
labe1.setText("手机号码重复! ");
labe1.setIcon(icon3);
flag = 0;
flag2 = 1;
} else {
Icon icon3 = new ImageIcon("src\\Img\\g1.png");
// 手机号码正确,只显示正确的那个图标
labe1.setText(" ");
labe1.setIcon(icon3);
flag = 1;
}
} else {
Icon icon3 = new ImageIcon("src\\Img\\h2.png");
labe1.setText("请输入开头为13,14,15,17,18的号码,且为11位!");
labe1.setFont(new Font("宋体", 0, 12));// 设置标签字体
labe1.setForeground(Color.red);
labe1.setIcon(icon3);
flag = 0;
}
} String s = String.valueOf(pass1.getPassword()); // 将数字转换成字符串
if (e.getSource() == pass1) {
if ((s.length() < 5 && s.length() > 0) || s.length() > 12) {
JOptionPane.showMessageDialog(null, "密码长度必须在5~12个字符之内!"); } else {
Icon icon2 = new ImageIcon("src\\Img\\g1.png"); // 第一个密码成功图标
labe2.setText(" ");
labe2.setIcon(icon2);
}
} } catch (Exception ee) {
// System.out.println(ee1);
} } public void actionPerformed(ActionEvent e) {
if (e.getSource() == button) { try {
// String str = String.valueOf(text1.getText()); //将数字转化为字符串
String str2 = String.valueOf(pass1.getPassword());
String str3 = String.valueOf(pass2.getPassword()); if (!(str2.equals(str3))) {
Icon icon2 = new ImageIcon("src\\Img\\h1.png");
labe3.setText("密码正确!");
labe3.setFont(new Font("宋体", 0, 12));// 设置标签字体
labe3.setForeground(Color.blue);
labe3.setIcon(icon2); JOptionPane.showMessageDialog(null, "两次密码不一致");
} else if (str2.equals(str3) && flag == 1 && flag2 == 1) {
JOptionPane.showMessageDialog(null, "注册成功!");
String string1 = String.valueOf(text1.getText());
String string2 = String.valueOf(pass2.getPassword());
set1.add(string1); // 向集合中添加注册成功的新号码
set2.add(string2); // 向集合中添加注册成功的新密码
flag2 = 0;
} else {
if (flag2 != 0) {
JOptionPane.showMessageDialog(null, "请输入正确的手机号!");
}
}
} catch (Exception ee1) {
}
}
}
}
运行结果

用java编写一个微博登陆页面的更多相关文章
- 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小
原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...
- 面试题之java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况
题目:10. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输 ...
- java,编写一个从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出foo,在每个5的倍数行上打印biz,在每个7的倍数上打印baz.
需求:编写一个从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出foo,在每个5的倍数行上打印biz,在每个7的倍数上打印baz. package study01; public cla ...
- 用java写一个用户登陆界面
一.课堂测试源代码及其结果截图 用java的swing写一个用户登录界面,采用网格布局.源代码如下: /** * */package LiuLijia; import java.awt.CardLay ...
- Java Web JSTL实现登陆页面重定向 jstl标签
<form action="js/loginResult.jsp" class="loginForm" id="loginForm" ...
- java编写一个可以上下移动的小球:运行后,可以通过上下左右键进行移动
/* * 功能:加深对事件处理机制的理解 * 1.通过控制上下左右键,来控制一个小球的位置 */package com.test1;import java.awt.*;import javax.swi ...
- Java编写一个随机产生小学生四则运算题30道
//注:这个程序还没有实现的地方为分数的计算方法未能实现,只是简单的两个数运算,没有实现多个数,四则运算中的数没有涉及0. package 课堂测试1; import java.io.File; im ...
- 使用Java编写一个日期时间封装类
package base; import java.util.GregorianCalendar; import java.util.StringTokenizer; import java.util ...
- java编写一个可以上、下、左、右移动的坦克
唉,本人学习进度缓慢,但依然会坚持不懈!有感兴趣的朋友可以在下面留言. 源代码献上: /* * 画出我的坦克,使他可以上下左右移动 */package com.test4; import javax. ...
随机推荐
- 32位汇编第一讲x86和8086的区别,以及OllyDbg调试器的使用
32位汇编第一讲x86和8086的区别,以及OllyDbg调试器的使用 一丶32位(x86也称为80386)与8086(16位)汇编的区别 1.寄存器的改变 AX 变为 EAX 可以这样想,16位通 ...
- 记一次wiki数据爬取过程
最近有个爬取各国领导人信息的奇怪需求,要求百度和维基两种版本的数据,最要命的还要保持数据的结构不变.正好印象中隐约记得维基有专门的领导人列表页,不考虑爬取下来的格式不变的话应该很好爬的样子. 首先思路 ...
- [转载]Python实现浏览器自动化操作
原文地址:Python实现浏览器自动化操作作者:rayment 最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是支持IE,而且项目也较久没 ...
- 【Alpha】 第七次Daily Scrum Meeting
一.本次会议为第七次meeting会议 二.时间:9:37AM-9:50AM 地点:禹州三楼 三.会议站立式照片 四.今日任务 成员 昨日任务 今日任务 林清青 学习并了解微信程序相关方面知识,为小组 ...
- 201521123026 《Java程序设计》第5周学习总结
1. 本章学习总结 尝试使用思维导图总结有关多态与接口的知识点 使用常规方法总结其他上课内容 1.接口的出现时为了实现多态,多态的实现不一定依赖于接口. 2.接口的常见成员有:全局常量和抽象方法. 3 ...
- 201521123108《Java程序设计》第3周学习总结
1. 本章学习总结 2. 书面作业 Q1. 代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...
- 201521123067 《Java程序设计》第9周学习总结
201521123067 <Java程序设计>第9周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 Q1.常用异常(题目5-1 ...
- 201521123115《java程序设计》第十一周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1. ...
- 201521123087 《Java程序设计》第11周学习总结
1. 本周学习总结 2. 书面作业 本次PTA作业题集多线程 互斥访问与同步访问完成题集4-4(互斥访问)与4-5(同步访问)1.1 除了使用synchronized修饰方法实现互斥同步访问,还有什么 ...
- smarty文件夹,第一个smarty实例总结
主要是libs里面的smarty类,和init.inc.php配置文件 剩下的是php文件夹.模板文件夹,临时文件夹.缓存文件夹.配置文件夹.插件文件夹 调用main文件夹中的php文件,通过 ...