java實現(xiàn)登錄窗口
更新時間:2022年04月25日 14:51:51 作者:mlee1018
這篇文章主要為大家詳細介紹了java實現(xiàn)登錄窗口,含驗證碼驗證、賬戶注冊等,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了java實現(xiàn)登錄窗口的具體代碼,供大家參考,具體內容如下
登錄窗口主類
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"); // 用于賬戶注冊
? ? // 設置組件的監(jiān)聽
? ? 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();
? ? ? ? ? ? }
? ? ? ? });
? ? }
? ? // 初始化登錄窗口及其組件的設置監(jiān)聽
? ? 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(); // 最好時靜態(tài)的,因為賬戶是共享的
? ? 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(""))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? JOptionPane.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();
? ? ? ? }
? ? ? ? // 初始化窗口組件的監(jiān)聽
? ? ? ? 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();
? ? ? ? }
? ? }
? ? // 判斷此用戶名是否已經(jīng)存在
? ? public boolean isExist(String userName)
? ? {
? ? ? ? Enumeration enumer = pro.propertyNames();
? ? ? ? while (enumer.hasMoreElements())
? ? ? ? {
? ? ? ? ? ? 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.nextInt(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) // 根據(jù)指定路徑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.txt
123456789+-
提示圖片


登錄效果

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
springboot開啟Bean數(shù)據(jù)校驗功能
這篇文章主要介紹了springboot開啟Bean數(shù)據(jù)校驗功能,通過啟用Bean屬性校驗導入JSR303與Hibernate校驗框架坐標,使用@Validated注解啟用校驗功能,需要的朋友可以參考下2023-10-10

