java实现登录窗口(java用户登陆界面)

网友投稿 272 2022-08-02


本文实例为大家分享了java实现登录窗口的具体代码,供大家参考,具体内容如下

登录窗口主类

package ccnu.paint;

import java.awt.Color;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.Point;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.util.Enumeration;

import java.util.Properties;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

import ccnu.util.Answer;

import ccnu.util.Verification;

public class Login extends JFrame

{

private static final long serialVersionUID = 1L;

private Properties pro = new Properties();

private boolean ver_code = false; // 默认输入验证码错误

private Answer answer = null;

private JPanel p1 = new JPanel(); // 添加到JPanel中的组件默认为流式布局

private JLabel luser = new JLabel("username: ");

private JTextField username = new JTextField(20);

private JPanel p2 = new JPanel();

private JLabel lpwd = new JLabel("password: ");

private JPasswordField pwd = new JPasswordField(20);

private JPanel p4 = new JPanel();

private JLabel lVer = new JLabel("verification: ");

private JTextField ver = new JTextField(10);

private JLabel img = new JLabel();

private JLabel result = new JLabel();

private JPanel p3 = new JPanel();

private JButton ok = new JButton("ok");

private JButton cancel = new JButton("cancel");

private JButton signUp = new JButton("Sign up"); // 用于账户注册

// 设置组件的监听

public void initListener()

{

username.addActionListener(new ActionListener()

{

@Override

public void actionPerformed(ActionEvent e)

{// JTextField的action是回车键

String name = username.getText();

// Login.this.setTitle(name);

// System.out.println(name.hashCode() + "***" +"".hashCode());

if (name.equals(""))

{

JOptionPane.showMessageDialog(Login.this, "Please input a userName!");

} else

{

pwd.grabFocus();

}

}

});

pwd.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent e)

{

String password = new String(pwd.getPassword());

if(password.equalsIgnoreCase(""))

{

JOptionPane.showMessageDialog(Login.this, "please input a password!");

}else{

ver.grabFocus();

}

}

});

ok.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent e)

{

// 重新加载最新的账户文件

try

{

pro.load(new FileInputStream(new File("src/res/accouts.properties")));

} catch (IOException e1)

{

e1.printStackTrace();

}

check();

}

});

// 判断验证码是否正确

ver.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent e)

{

String verCode = ver.getText();

if(verCode.equals(""))

{

JOptionPane.showMessageDialog(Login.this, "Please input a verification!");

}else{

if(verCode.equals(answer.getResult()))

{

result.setIcon(new ImageIcon(Login.this.getClass().getResource("/res/right.jpg"))); // 显示提示的图片信息(如√图片)

ver_code = true;

// 检查之前,重新加载最新的账户文件

try

{

pro.load(new FileInputStream(new File("src/res/accouts.properties"))); // 将账户文件加载进来

} catch (IOException e1)

{

e1.printStackTrace();

}

check();

}else{

result.setIcon(new ImageIcon(Login.this.getClass().getResource("/res/error.jpg"))); // 显示提示的图片信息(如图片)

ver_code = false;

}

}

}

});

// 点击图片会更改验证码

img.addMouseListener(new MouseAdapter(){

@Override

public void mouseClicked(MouseEvent e)

{

answer = Verification.verification();

img.setIcon(new ImageIcon(answer.getBufferedImage())); // 设置验证码图案

}

});

cancel.addActionListener(new ActionListener()

{

@Override

public void actionPerformed(ActionEvent e)

{

int option = JOptionPane.showConfirmDialog(Login.this, "Are you sure to exit?");

// System.out.println("option = " + option);

if (option == 0)

{// Yes

Login.this.dispose();

}

}

});

signUp.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent e)

{

new SignUp();

}

});

}

// 初始化登录窗口及其组件的设置监听

public Login()

{

super("Login");

// 加载账户文件

try

{

pro.load(new FileInputStream(new File("src/res/accouts.properties"))); // 从指定位置将账户文件加载进来

} catch (IOException e)

{

e.printStackTrace();

}

initListener();

answer = Verification.verification(); // 生成验证码

img.setIcon(new ImageIcon(answer.getBufferedImage())); // 设置初始验证码

this.setLocation(new Point(200, 200));

this.setSize(500, 300);

this.setLayout(new GridLayout(4, 1, 0, 20)); // 垂直间隙为20px

p1.add(luser);

p1.add(username);

p2.add(lpwd);

p2.add(pwd);

p4.add(this.lVer);

p4.add(this.ver);

p4.add(this.img);

result.setForeground(Color.red);

result.setFont(new Font("楷体", Font.BOLD, 20));

p4.add(result);

p3.add(ok);

p3.add(cancel);

p3.add(signUp);

this.add(p1);

this.add(p2);

this.add(p4);

this.add(p3);

// this.setBackground(Color.blue); // JFrame的上层还有一个ContentPane

this.getContentPane().setBackground(Color.gray);

this.setResizable(false);

this.setVisible(true);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 等价于Frame中的windowClosing事件

}

// 检查用户名或密码

public void check()

{

String verCode = ver.getText();

if(verCode.equals(""))

{

JOptionPane.showMessageDialog(Login.this, "Please input a verification!");

return;

}else{

if(verCode.equals(answer.getResult()))

{

result.setIcon(new ImageIcon(Login.this.getClass().getResource("/res/right.jpg")));

ver_code = true;

}else{

result.setIcon(new ImageIcon(Login.this.getClass().getResource("/res/error.jpg")));

ver_code = false;

}

}

if(ver_code == false)

{

JOptionPane.showMessageDialog(this, "verification is error!");

return;

}

String name = username.getText();

String password = new String(pwd.getPassword()); // return char[]

// if (name.equalsIgnoreCase("admin") && password.equals("123456"))

if (isPass(name, password))

{

// new PaintApp(name);

JOptionPane.showMessageDialog(this, "-^_^- OK..."); // 此处可以加上其他的登陆成功后进一步处理的窗口

this.dispose();

} else

{

JOptionPane.showMessageDialog(this, "userName or password is incorrect!");

username.setText("");

pwd.setText("");

ver.setText("");

answer = Verification.verification();

img.setIcon(new ImageIcon(answer.getBufferedImage()));

result.setIcon(null);

}

}

// 验证用户输入的账户名和密码是否正确(通过与加载进来的账户 pro 比对)

public boolean isPass(String name, String password)

{

Enumeration en = pro.propertyNames();

while(en.hasMoreElements())

{

String curName = (String)en.nextElement();

// System.out.println(curName + "---" + pro.getProperty(curName));

if(curName.equalsIgnoreCase(name))

{

if(password.equalsIgnoreCase(pro.getProperty(curName)))

{

return true;

}

}

}

return false;

}

public static void main(String[] args)

{

new Login();

}

}

账户注册类

package ccnu.paint;

import java.awt.GridLayout;

import java.awt.Point;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.Enumeration;

import java.util.Properties;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

public class SignUp extends JFrame

{

private static final long serialVersionUID = 3054293481122038909L;

private Properties pro = new Properties(); // 最好时静态的,因为账户是共享的

private JPanel panel = new JPanel();

private JLabel label = new JLabel("username: ");

private JTextField field = new JTextField(15);

private JPanel panel2 = new JPanel();

private JLabel label2 = new JLabel("password: ");

private JPasswordField field2 = new JPasswordField(15);

private JPanel panel3 = new JPanel();

private JLabel label3 = new JLabel("confirmation: ");

private JPasswordField field3 = new JPasswordField(15);

private JPanel panel4 = new JPanel();

private JButton button = new JButton("OK");

private JButton button2 = new JButton("Cancel");

public void initListener()

{

field.addActionListener(new ActionListener()

{

@Override

public void actionPerformed(ActionEvent e)

{

field2.grabFocus();

}

});

field2.addActionListener(new ActionListener()

{

@Override

public void actionPerformed(ActionEvent e)

{

field3.grabFocus();

}

});

field3.addActionListener(new ActionListener()

{

@Override

public void actionPerformed(ActionEvent e)

{

ok_actionPerformed(e);

}

});

// OK

button.addActionListener(new ActionListener()

{

@Override

public void actionPerformed(ActionEvent e)

{

ok_actionPerformed(e);

}

});

// Cancel

button2.addActionListener(new ActionListener()

{

@Override

public void actionPerformed(ActionEvent e)

{

cancel_actionPerformed(e);

}

});

}

public void ok_actionPerformed(ActionEvent e)

{

String userName = field.getText();

String password = new String(field2.getPassword());

String password2 = new String(field3.getPassword());

if (userName.equals(""))

{

JOptionPane.showMessageDialog(SignUp.this, "username cannot be empty!");

} else

{

if (password.equalsIgnoreCase(""))

{

JOhReYoeptionPane.showMessageDialog(SignUp.this, "password cannot be empty!");

} else

{

if (password2.equalsIgnoreCase(password))

{

if (isExist(userName))

{

JOptionPane.showMessageDialog(SignUp.this, "username has been existed!");

field.setText("");

field2.setText("");

field3.setText("");

} else

{

pro.setProperty(userName, password);

JOptionPane.showMessageDialog(SignUp.this, "SignUp success!");

writeToPro(userName, password); // 将其写入到账户文件中

SignUp.this.dispose();

}

} else

{

JOptionPane.showMessageDialog(SignUp.this, "password is not consistent!");

field2.setText("");

field3.setText("");

}

}

}

}

public void cancel_actionPerformed(ActionEvent e)

{

System.exit(0);

}

public SignUp()

{

super("Sign up");

// 加载账户文件

try

{

pro.load(new FileInputStream(new File("src/res/accouts.properties")));

} catch (IOException e)

{

e.printStackTrace();

}

// 初始化窗口组件的监听

initListener();

this.setLocation(new Point(300, 230));

this.setSize(280, 210);

this.setLayout(new GridLayout(4, 1, 0, 20)); // 垂直间隙为20px

panel.add(label);

panel.add(field);

panel2.add(label2);

panel2.add(field2);

panel3.add(label3);

panel3.add(field3);

panel4.add(button);

panel4.add(button2);

this.add(panel);

this.add(panel2);

this.add(panel3);

this.add(panel4);

this.setAlwaysOnTop(true);

this.setResizable(false);

this.setVisible(true);

}

// 如果注册始终可用,就要保存起来,否则不需要写入文件中,注册账户本次使用

// 将账户名与其对应密码保存到指定的账户文件中

public void writeToPro(String userName, String password)

{

pro.setProperty(userName, password);

try

{

pro.store(new FileOutputStream(new File("src/res/accouts.properties")), "allAccouts");

} catch (IOException e)

{

e.printStackTrace();

}

}

// 判断此用户名是否已经存在

public boolean isExist(String userName)

{

Enumeration enumer = pro.propertyNames();

while (enumer.hasMoreElements())

{

hReYoe String temp = (String) enumer.nextElement();

if (temp.equals(userName))

{

return true;

}

}

return false;

}

}

生成验证码类

package ccnu.util;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Point;

import java.awt.image.BufferedImage;

import java.util.Random;

// 用于生成验证码

public class Verification

{

private static Answer answer = new Answer();

private static BufferedImage bufferedImage = null;

private static String result = null;

private static String words = null;

private static String words2 = null;

// 生成验证码

public static Answer verification()

{

bufferedImage = new BufferedImage(200, 35, BufferedImage.TYPE_INT_RGB);

Graphics g = bufferedImage.getGraphics();

Random rand = new Random();

for (int i = 0; i < 20; i++)

{

Point p1 = new Point(rand.nextInt(200), rand.nextInt(30));

Point p2 = new Point(rand.nextInt(200), rand.nextInt(30));

g.drawLine(p1.x, p1.y, p2.x, p2.y);

}

g.setColor(Color.RED);

g.setFont(new Font("楷体", Font.BOLD, 22));

int plan = 2;

switch (rand.nextInt(plan))

{

case 0:

plan(g);

break;

case 1:

plan1(g);

break;

default:

break;

}

answer.setBufferedImage(bufferedImage);

answer.setResult(result);

g.dispose();

return answer;

}

// 方案一

private static void plan(Graphics g)

{

words = ReadTxt.read("/res/words.txt"); // 指定生成验证码问题的资源文件的路径

Random rand = new Random();

String first = String.valueOf(words.charAt(rand.nextInt(words.length())));

String second = String.valueOf(words.charAt(rand.nextInt(words.length())));

String third = String.valueOf(words.charAt(rand.nextInt(words.length())));

g.drawString(first, rand.nextInt(40) + 20, rand.nextInt(12) + 15);

g.drawString(second, rand.nextInt(40) + 80, rand.nexhReYoetInt(12) + 15);

g.drawString(third, rand.nextInt(40) + 140, rand.nextInt(12) + 15);

result = first + second + third;

}

// 方案二

private static void plan1(Graphics g)

{

words2 = ReadTxt.read("/res/words2.txt"); // 指定生成验证码问题的资源文件的路径

Random rand = new Random();

String first = String.valueOf(words2.charAt(rand.nextInt(words2.length() - 2)));

String second = String.valueOf(words2.charAt(rand.nextInt(2) + 9));

String third = String.valueOf(words2.charAt(rand.nextInt(words2.length() - 2)));

g.drawString(first, rand.nextInt(30) + 20, rand.nextInt(12) + 15);

g.drawString(second, rand.nextInt(40) + 60, rand.nextInt(12) + 15);

g.drawString(third, rand.nextInt(30) + 110, rand.nextInt(12) + 15);

g.drawString("=", rand.nextInt(40) + 150, rand.nextInt(12) + 15);

if(second.equals("+"))

{

result = String.valueOf(Integer.valueOf(first) + Integer.valueOf(third));

}else{

result = String.valueOf(Integer.valueOf(first) - Integer.valueOf(third));

}

}

}

读取生成验证码所需文件类

package ccnu.util;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

// 专门用于读取文件

public class ReadTxt

{

public static String read(String path) // 根据指定路径path来读取它,并返回它所包含的内容

{

StringBuffer sb = new StringBuffer();

try

{

BufferedReader br = new BufferedReader(new InputStreamReader(Verification.class.getResourceAsStream(path)));

String temp = null;

while(null != (temp = br.readLine()))

{

sb.append(temp);

}

br.close();

} catch (IOException e)

{

e.printStackTrace();

}

return sb.toString();

}

}

得到生成的验证码所包含的信息类(图案、问题)

package ccnu.util;

import java.awt.image.BufferedImage;

// 用于将生成的验证码的图案信息以及问题结果封装

public class Answer

{

private BufferedImage bufferedImage = null; // 验证码图像

private String result = null; // 验证码图像问题的答案

public BufferedImage getBufferedImage()

{

return bufferedImage;

}

public void setBufferedImage(BufferedImage bufferedImage)

{

this.bufferedImage = bufferedImage;

}

public String getResult()

{

return result;

}

public void setResult(String result)

{

this.result = result;

}

}

验证码生成汉字识别的问题的文件words.txt如: 中国湖北省武汉市汉东大学政法学院

验证码生成算术运算的问题的文件words2.txt123456789+-

提示图片

登录效果


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot中的Mybatis依赖问题(springboot整合mybatis依赖)
下一篇:Java零基础讲解异常(java五种常见异常)
相关文章