标签:密码 listen on() i++ 标签 for images 容器 退出
[实验任务四:登录界面]
程序设计思想:
首先是登录界面的布局,因为组件不是很整齐,没有使用固定的布局,主界面的setLayout()参数设为null,用setBounds()对各个组件标签、文本框、按钮等进行自由布局。验证码用按钮的形式显示便于每点击以此按钮会触发验证码的事件,进行随机转换,重新生成一个新的6位验证码。验证码是先生成0~2的数,0、1、2分别代表数字、小写字母、大写字母出现的一定概率,再用ASCII表的对应值的随机数产生字符,循环6次组合成字符串。用户名和验证码处的文本框直接读入,而密码处的文本框则为了保护密码的安全性,采用JPasswordField进行定义,使输进去的密码变为*。登录按钮的触发事件,用户名不对则提示用户名不存在,密码不对则提示密码有误,验证码不对提示验证码有误,都正确则显示登陆成功,初始的用户名密码设成了自己的学号。快速注册也自动识别并提示注册成功。
程序流程图
程序源代码:
package denglujiemian;
import java.awt.*;
import javax.swing.*;
import java.util.Random;
import java.awt.event.*;
public class Denglujiemian//定义Denglujiemian类
{
JFrame frame;//定义frame
JLabel label1=new JLabel("登录名:");//定义标签1 label1为“登录名”
JLabel label2=new JLabel("密码:");//定义标签2 label2为“密码”
JLabel label3=new JLabel("验证码:");//定义标签3 label3为“验证码”
JButton button1,button2,button3;//定义三个按钮分别为“登录”,“快速注册”,以及一个验证码按钮
JPanel panel1=new JPanel();//面板1 panel1
JPanel panel2=new JPanel();//面板2 panel2
JTextArea text1,text3;//定义文本框text1,text3
JPasswordField password=new JPasswordField();//定义密码文本框
String s="";//定义验证码按钮上的字符串
Random ran=new Random();
String user_z,user_m;
public static void main(String[] args) //主函数
{
Denglujiemian p=new Denglujiemian();//Denglujiemian类的实例化
p.go();//对象p调用go函数
}
public void go()//定义go函数
{
frame=new JFrame("登录界面");//建立frame并命名为"登录界面"
text1=new JTextArea(20,100);//建立text1文本框并定义大小为20,100
password=new JPasswordField();//建立password密码文本框
text3=new JTextArea(20,100);//建立text3文本框并定义大小为20,100
button3=new JButton();//建立验证码按钮
button1=new JButton("登录");//建立登录按钮并定义为"登录"
button2=new JButton("快速注册");//建立快速注册按钮并定义为"快速注册"
for(int i=0;i<6;i++)//产生验证码,需循环6次
{
int x=ran.nextInt(3);//产生0~2三个中的随机数,分别对应数字,小写字母,大写字母
switch(x)//switch语句判断
{
case 0://x为0时
{
int q=ran.nextInt(10);//产生q为0~9的随机数
s=s+q;//验证码字符串加上一个
continue;//跳出switch小循环
}
case 1://x为1时
{
char w=(char) (ran.nextInt(26)+65);//产生q为65~91的随机数,并强制转换成ASCII表上的字符(小写字母)
s=s+w;//验证码字符串加上一个
continue;//跳出switch小循环
}
case 2://x为2时
{
char e=(char) (ran.nextInt(26)+97);//产生q为97~126的随机数,并强制转换成ASCII表上的字符(大写字母)
s=s+e;//验证码字符串加上一个
continue;//跳出switch小循环
}
}
}
Container contentPane=frame.getContentPane();//定义容器
contentPane.setLayout(null);//不设置固定的布局
contentPane.setBackground(Color.GRAY);//设置背景为灰色
//大容器里把所有组件都添加进去
contentPane.add(label1);
contentPane.add(label2);
contentPane.add(label3);
contentPane.add(text1);
contentPane.add(password);
contentPane.add(text3);
contentPane.add(button3);
contentPane.add(button1);
contentPane.add(button2);
//分别设置组件的位置和长宽
label1.setBounds(10,10,60,30);
label2.setBounds(10,40,60,30);
label3.setBounds(10,70,60,30);
text1.setBounds(70,15,200,20);
password.setBounds(70,45,200,20);
text3.setBounds(70,75,110,20);
button3.setBounds(185,75,85,20);
button1.setBounds(100,100,100,20);
button2.setBounds(100,130,100,20);
button3.setText(s);//将系统生成的6位验证码设置成验证码按钮的名称
frame.setSize(300,200);//设置面板的大小
frame.setResizable(false);//设置面板大小不可修改
frame.setVisible(true);//显示面板
button3.addActionListener(new ActionListener()//验证码按钮使用匿名类添加事件
{
public void actionPerformed(ActionEvent e)//ActionListener接口中的函数重写
{
s="";//定义空字符串
for(int i=0;i<6;i++)//产生验证码,需循环6次
{
int x=ran.nextInt(3);//产生0~2三个中的随机数,分别对应数字,小写字母,大写字母
switch(x)//switch语句判断
{
case 0://x为0时
{
int q=ran.nextInt(10);//产生q为0~9的随机数
s=s+q;//验证码字符串加上一个
continue;//跳出switch小循环
}
case 1://x为1时
{
char w=(char) (ran.nextInt(26)+65);//产生q为65~91的随机数,并强制转换成ASCII表上的字符(小写字母)
s=s+w;//验证码字符串加上一个
continue;//跳出switch小循环
}
case 2://x为2时
{
char g=(char) (ran.nextInt(26)+97);//产生q为97~126的随机数,并强制转换成ASCII表上的字符(大写字母)
s=s+g;//验证码字符串加上一个
continue;//跳出switch小循环
}
}
}
button3.setText(s);//字符串s设置为验证码按钮的名称
}
});
button1.addActionListener(new ActionListener()//登录按钮使用匿名类添加事件
{
public void actionPerformed(ActionEvent e)//ActionListener接口中的函数重写
{
String s1=text1.getText();//得到登录名处的文本框的内容
char[] p=password.getPassword();
String s2=new String(p);//得到密码处的文本框的内容
String s3=text3.getText();//得到验证码处的文本框的内容
if(s1.equals("20163493")&&s2.equals("20163493")&&s3.equals(s))//判断字符串是否相等
JOptionPane.showMessageDialog(frame,"登录成功!","登录信息",JOptionPane.PLAIN_MESSAGE);//如果登录名密码验证码都正确,弹出登录成功
else if(s1.equals("20163493")&&!s2.equals("20163493")&&s3.equals(s))//判断字符串是否相等
JOptionPane.showMessageDialog(frame,"用户名或密码有误!","登录信息",JOptionPane.ERROR_MESSAGE);//如果登录名验证码都正确,密码不正确,弹出用户名或密码有误
else if(!s1.equals("20163493"))//判断字符串是否相等
JOptionPane.showMessageDialog(frame,"该用户名不存在!","登录信息",JOptionPane.ERROR_MESSAGE);//如果登录名不正确,弹出该用户名不存在
else if(s1.equals("20163493")&&s2.equals("20163493")&&!s3.equals(s))//判断字符串是否相等
JOptionPane.showMessageDialog(frame,"验证码错误!","登录信息",JOptionPane.ERROR_MESSAGE);//如果登录名密码都正确,验证码不正确,弹出验证码错误
}
});
button2.addActionListener(new ActionListener()//快速注册按钮使用匿名类添加事件
{
public void actionPerformed(ActionEvent e)//ActionListener接口中的函数重写
{
user_z=text1.getText();//得到登录名处的文本框的内容
char[] p=password.getPassword();
user_m=new String(p);//得到密码处的文本框的内容
String s3=text3.getText();//得到验证码处的文本框的内容
JOptionPane.showMessageDialog(frame,"注册成功!","注册信息",JOptionPane.PLAIN_MESSAGE);//读入登录名密码验证码,弹出注册成功
}
});
}
}
实现结果截图:
实验总结:
对于实现不同功能的按钮来说,使用匿名类的方式添加事件比较方便,不易出现错误。
[实验任务五:猜数字]
程序设计思想:
当程序开始执行时,系统自动生成一个1~100的随机整数。引用do while语句使用户循环输入一个猜测的数值,将其由字符串类型转换成整型数值并与系统生成数进行判断。如果大于,则弹出消息框提示“猜大了!”,否则,则弹出消息框提示“猜小了!”。循环此操作直到用户猜的数值和系统生成数相等,跳出循环,弹出消息框提示猜到正确数值,程序退出。
程序流程图:
程序源代码:
package caishuzi;
import java.util.Random;
import javax.swing.*;
public class Caishuzi//定义Caishuzi类
{
public static void main(String[] args)//主函数
{
String s;//定义s为要输入的猜测数值
int d;//定义d为字符串s转换为的整型数值
Random random=new Random();//随机数
int t=random.nextInt(100)%(100)+1;//生成t为1~100的随机整数
do//do while循环语句输入并判断
{
s=JOptionPane.showInputDialog( "请输入您猜测的数值:" );//弹出消息框,进行猜测数值的输入
d=Integer.parseInt(s);//字符串s转化为整型数值d
if(d>t)//如果猜测数值大于系统随机数
JOptionPane.showMessageDialog(null,"猜大了!",
"Results",JOptionPane.PLAIN_MESSAGE );//弹出消息框提示“猜大了”
else if(d<t)//如果猜测数值小于系统随机数
JOptionPane.showMessageDialog(null,"猜小了!",
"Results",JOptionPane.PLAIN_MESSAGE );//弹出消息框提示“猜小了”
}while(d!=t);//满足循环的条件
JOptionPane.showMessageDialog(null,"恭喜,正确猜出数字!"+t,
"Results",JOptionPane.PLAIN_MESSAGE );//弹出消息框提示猜出正确数字
}
}
运行结果截图:
编译错误分析:
无编译错误出现
标签:密码 listen on() i++ 标签 for images 容器 退出
原文地址:http://www.cnblogs.com/guobin-/p/7629289.html