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

基本功能如下:

(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. WebApi Ajax 跨域请求解决方法(CORS实现)(作者:jianxuanbing)

    概述 ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题,特别各 ...

  2. 移动端rem使用

    let $html=document.documentElement,windowW = window.innerWidth,ratio = windowW / 750if (windowW > ...

  3. 从聚合数据请求菜谱大全接口数据,解析显示到ListView

  4. 团队作业4——第一次项目冲刺(Alpha版本) 日志集合处

    第一天(2017.4.23) http://www.cnblogs.com/1413none/p/6752325.html 第二天(2017.4.24) http://www.cnblogs.com/ ...

  5. 【Beta阶段】第七次scrum meeting

    Coding/OSChina 地址 1. 会议内容 学号 主要负责的方向 昨日任务 昨日任务完成进度 接下去要做 99 PM 配合100完成联网功能 100% 设置个人中心的设计 100 DEV 开始 ...

  6. 201521123102 《Java程序设计》第4周学习总结

    1. 本周学习总结 2. 书面作业 Q1.注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) 类的注释: 方法的注释: Q2.面向对象设计(大作业1- ...

  7. 201521123075 《Java程序设计》第2周学习总结

    1. 本周学习总结 各种数据类型,运算符,表达式的使用: 字符串String类; 对数组对象和字符串对象的运用. 2. 书面作业 1.使用Eclipse关联jdk源代码,并查看String对象的源代码 ...

  8. 201521123078 《java程序设计》第十周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 创建线程:定义Thread的子类可以实现Runable接口 线程的控制:线程暂停Thread.sleep() ...

  9. 201521123008 《Java程序设计》第十四周学习总结

    1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 在自己建立的数据库上执行常见SQL语句(截图) - ...

  10. Java: private、protected、public和default的区别

    public: 具有最大的访问权限,可以访问任何一个在classpath下的类.接口.异常等.它往往用于对外的情况,也就是对象或类对外的一种接口的形式. protected: 主要的作用就是用来保护子 ...