用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. ...
随机推荐
- 两台主机之间单向Ping不通的问题
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } p.p2 ...
- Day-7: 模块知识
Python中,一个.py文件就是一个模块(module):而,包含了多个模块的一个目录,称为包. 每一个包中,都包含一个_init_.py文件,可以是一个空文件,这是Python将普通目录识别为包的 ...
- Python 学习系列----第一章:基础知识
1.1 常量-----不能改变它的值 1.2 数 在Python 中数可以分为整数.浮点数和复数. PS:在Python中不用区分'long int'类型.默认的整数类型可以任意长.(译者注:长度应该 ...
- OSX 10.8+下开启Web 共享 的方法
MENU Home Archives About SUBSCRIBE ☰MENU OSX 10.8+ Mountain Lion 下开启 Web Sharing(Web 共享)的方法 JUL 28, ...
- 软工+C(2017第7期) 野生程序员
// 上一篇:最近发展区/脚手架 // 下一篇:提问和回复 怎样做足够好的软件?我们就差一个程序员! 没有什么软件工程的理论的时候,程序员们凭借自己对编程的热爱,凭借着:"这是一个可以自动化 ...
- Beta版本冲刺前准备
Beta版本冲刺 经过紧张的Alpha阶段,很多组已经从完全不熟悉语言和环境,到现在能够实现初步的功能.下一阶段即将加快编码进度,完成系统功能.强化软件工程的体会. 1.凡事预则立,在Beta开始前, ...
- 201521123083 《Java程序设计》第7周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 参考资料: 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains public ...
- Excel表科学记数法的数字和文本的转换
一,科学记数法的数字转换文本类型: 1,还未有数据,先选中列或者单元格 右键单击->设置单元格格式->文本->确定 2,已有数据,先选中列或者单元格 右键单击->设置单元格格式 ...
- 一、React Native 搭建开发环境(1)(Mac OS - IOS项目)
React Native是Facebook推出的一个开发IOS和安卓APP的技术.至于更多的详情,这里不再描述,大家可以自行百度它的定义. 目的: 由于我想在一台电脑上同时开发IOS和Android两 ...
- 磁盘管理之inode与block
索引式文件系统 什么是inode? Inode其实就是索引号,便于我们寻找我们文件所存储的数据块block,索引式文件系统在查找信息,读写操作上都比原来的文件系统要快,我们可以通过inode中记录的b ...