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

基本功能如下:

(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编写一个微博登陆页面的更多相关文章

  1. 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小

    原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...

  2. 面试题之java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况

    题目:10. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输 ...

  3. java,编写一个从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出foo,在每个5的倍数行上打印biz,在每个7的倍数上打印baz.

    需求:编写一个从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出foo,在每个5的倍数行上打印biz,在每个7的倍数上打印baz. package study01; public cla ...

  4. 用java写一个用户登陆界面

    一.课堂测试源代码及其结果截图 用java的swing写一个用户登录界面,采用网格布局.源代码如下: /** * */package LiuLijia; import java.awt.CardLay ...

  5. Java Web JSTL实现登陆页面重定向 jstl标签

    <form action="js/loginResult.jsp" class="loginForm" id="loginForm" ...

  6. java编写一个可以上下移动的小球:运行后,可以通过上下左右键进行移动

    /* * 功能:加深对事件处理机制的理解 * 1.通过控制上下左右键,来控制一个小球的位置 */package com.test1;import java.awt.*;import javax.swi ...

  7. Java编写一个随机产生小学生四则运算题30道

    //注:这个程序还没有实现的地方为分数的计算方法未能实现,只是简单的两个数运算,没有实现多个数,四则运算中的数没有涉及0. package 课堂测试1; import java.io.File; im ...

  8. 使用Java编写一个日期时间封装类

    package base; import java.util.GregorianCalendar; import java.util.StringTokenizer; import java.util ...

  9. java编写一个可以上、下、左、右移动的坦克

    唉,本人学习进度缓慢,但依然会坚持不懈!有感兴趣的朋友可以在下面留言. 源代码献上: /* * 画出我的坦克,使他可以上下左右移动 */package com.test4; import javax. ...

随机推荐

  1. Laravel学习基础篇之--路由

    终于还是决定再多学一门重量级框架,当然首选必备还是被称为最优雅的Web开发框架--Laravel 对于框架的入门,首先了解它的路由规则是先前必备的,以下是laravel 中几种常见的基础路由规则 // ...

  2. 认识大明星——轻量级容器docker知识树点亮

    docker是一个轻量级容器,属于操作系统层面的虚拟化技术,封装了文件系统(AUFS)以及网络互联,进程隔离等特性. 传统虚拟化架构: docker虚拟化架构: 可以看出,docker是没有Guest ...

  3. Visual Studio2017数据库架构比较

    一.前言 开发的时候在测试服务器上和线网服务器上面都有我们的数据库,当我们在线网上面修改或者新增一些字段后,线网的数据库也需要更新,这个时候根据表的修改记录,然后在线网上面一个一个增加修改很浪费效率而 ...

  4. java 得到以后的日期

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt222 import java.text.ParseException; im ...

  5. Ubuntu下安装NVIDIA显卡驱动的教训

    今天在ubuntu16.04版本下安装了NVIDIA的显卡驱动,真的是一波十六折: 首先是在英伟达的官网上查找你自己电脑的显卡型号然后下载相应的驱动. 网址:http://www.nvidia.cn/ ...

  6. RAID RAID 大揭秘~

    p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; f ...

  7. GIF、JPEG 和 PNG的区别在哪…

    原文地址:GIF.JPEG 和 PNG的区别在哪里?作者:苗得雨 GIF.JPEG 和 PNG 是三种最常见的图片格式. GIF:1987 年诞生,常用于网页动画,使用无损压缩,支持 256 种颜色( ...

  8. 【Alpha】——Fifth Scrum Meeting

    一.今日站立式会议照片 二.每个人的工作 成员 昨天已完成的工作 今天计划完成的工作 李永豪 测试统计功能 对统计出现的问题进一步完善 郑靖涛 着手编写报表设计 继续报表设计 杨海亮 协助编写统计功能 ...

  9. 201521123086 《Java程序设计》第8周学习总结

    本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 书面作业 1.List中指定元素的删除 题集jmu-Java-05-集合之4-1 1.1 实验总结 Answer: ...

  10. 《JAVA程序设计》第9周学习总结

    1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现 ...