欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實(shí)現(xiàn)登錄窗口

 更新時(shí)間:2022年04月25日 14:51:51   作者:mlee1018  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)登錄窗口,含驗(yàn)證碼驗(yàn)證、賬戶(hù)注冊(cè)等,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了java實(shí)現(xiàn)登錄窗口的具體代碼,供大家參考,具體內(nèi)容如下

登錄窗口主類(lèi)

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; // 默認(rèn)輸入驗(yàn)證碼錯(cuò)誤

? ? private Answer answer = null;

? ? private JPanel p1 = new JPanel(); // 添加到JPanel中的組件默認(rèn)為流式布局
? ? 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"); // 用于賬戶(hù)注冊(cè)

? ? // 設(shè)置組件的監(jiān)聽(tīng)
? ? public void initListener()
? ? {
? ? ? ? username.addActionListener(new ActionListener()
? ? ? ? {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void actionPerformed(ActionEvent e)
? ? ? ? ? ? {// JTextField的action是回車(chē)鍵
? ? ? ? ? ? ? ? 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)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? // 重新加載最新的賬戶(hù)文件
? ? ? ? ? ? ? ? try
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? pro.load(new FileInputStream(new File("src/res/accouts.properties")));
? ? ? ? ? ? ? ? } catch (IOException e1)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? e1.printStackTrace();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? check();
? ? ? ? ? ? }

? ? ? ? });

? ? ? ? // 判斷驗(yàn)證碼是否正確
? ? ? ? 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;
? ? ? ? ? ? ? ? ? ? ? ? // 檢查之前,重新加載最新的賬戶(hù)文件
? ? ? ? ? ? ? ? ? ? ? ? try
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? pro.load(new FileInputStream(new File("src/res/accouts.properties"))); // 將賬戶(hù)文件加載進(jìn)來(lái)
? ? ? ? ? ? ? ? ? ? ? ? } catch (IOException e1)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? e1.printStackTrace();
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? check();
? ? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ? ? result.setIcon(new ImageIcon(Login.this.getClass().getResource("/res/error.jpg"))); // 顯示提示的圖片信息(如×圖片)?
? ? ? ? ? ? ? ? ? ? ? ? ver_code = false;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });

? ? ? ? // 點(diǎn)擊圖片會(huì)更改驗(yàn)證碼
? ? ? ? img.addMouseListener(new MouseAdapter(){

? ? ? ? ? ? @Override
? ? ? ? ? ? public void mouseClicked(MouseEvent e)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? answer = Verification.verification();
? ? ? ? ? ? ? ? img.setIcon(new ImageIcon(answer.getBufferedImage())); // 設(shè)置驗(yàn)證碼圖案
? ? ? ? ? ? }
? ? ? ? });

? ? ? ? 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();
? ? ? ? ? ? }
? ? ? ? });
? ? }

? ? // 初始化登錄窗口及其組件的設(shè)置監(jiān)聽(tīng)
? ? public Login()
? ? {
? ? ? ? super("Login");

? ? ? ? // 加載賬戶(hù)文件
? ? ? ? try
? ? ? ? {
? ? ? ? ? ? pro.load(new FileInputStream(new File("src/res/accouts.properties"))); // 從指定位置將賬戶(hù)文件加載進(jìn)來(lái)
? ? ? ? } catch (IOException e)
? ? ? ? {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }

? ? ? ? initListener();
? ? ? ? answer = Verification.verification(); // 生成驗(yàn)證碼
? ? ? ? img.setIcon(new ImageIcon(answer.getBufferedImage())); // 設(shè)置初始驗(yàn)證碼

? ? ? ? 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的上層還有一個(gè)ContentPane
? ? ? ? this.getContentPane().setBackground(Color.gray);
? ? ? ? this.setResizable(false);
? ? ? ? this.setVisible(true);
? ? ? ? this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 等價(jià)于Frame中的windowClosing事件
? ? }

? ? // 檢查用戶(hù)名或密碼
? ? 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..."); // 此處可以加上其他的登陸成功后進(jìn)一步處理的窗口
? ? ? ? ? ? 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);
? ? ? ? }
? ? }

? ? // 驗(yàn)證用戶(hù)輸入的賬戶(hù)名和密碼是否正確(通過(guò)與加載進(jìn)來(lái)的賬戶(hù) pro 比對(duì))
? ? 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();
? ? }
}

賬戶(hù)注冊(cè)類(lèi)

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(); // 最好時(shí)靜態(tài)的,因?yàn)橘~戶(hù)是共享的

? ? 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); // 將其寫(xiě)入到賬戶(hù)文件中
? ? ? ? ? ? ? ? ? ? ? ? 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");

? ? ? ? // 加載賬戶(hù)文件
? ? ? ? try
? ? ? ? {
? ? ? ? ? ? pro.load(new FileInputStream(new File("src/res/accouts.properties")));
? ? ? ? } catch (IOException e)
? ? ? ? {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }

? ? ? ? // 初始化窗口組件的監(jiān)聽(tīng)
? ? ? ? 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);
? ? }

? ? // 如果注冊(cè)始終可用,就要保存起來(lái),否則不需要寫(xiě)入文件中,注冊(cè)賬戶(hù)本次使用
? ? // 將賬戶(hù)名與其對(duì)應(yīng)密碼保存到指定的賬戶(hù)文件中
? ? 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();
? ? ? ? }
? ? }


? ? // 判斷此用戶(hù)名是否已經(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;
? ? }
}

生成驗(yàn)證碼類(lèi)

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;

// 用于生成驗(yàn)證碼
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;

? ? // 生成驗(yàn)證碼
? ? 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"); // 指定生成驗(yàn)證碼問(wèn)題的資源文件的路徑
? ? ? ? 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"); // 指定生成驗(yàn)證碼問(wèn)題的資源文件的路徑
? ? ? ? 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));?
? ? ? ? }
? ? }

}

讀取生成驗(yàn)證碼所需文件類(lèi)

package ccnu.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

// 專(zhuān)門(mén)用于讀取文件
public class ReadTxt
{
? ? public static String read(String path) // 根據(jù)指定路徑path來(lái)讀取它,并返回它所包含的內(nèi)容
? ? {
? ? ? ? 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();
? ? }

}

得到生成的驗(yàn)證碼所包含的信息類(lèi)(圖案、問(wèn)題)

package ccnu.util;

import java.awt.image.BufferedImage;

// 用于將生成的驗(yàn)證碼的圖案信息以及問(wèn)題結(jié)果封裝
public class Answer
{
? ? private BufferedImage bufferedImage = null; // 驗(yàn)證碼圖像
? ? private String result = null; // 驗(yàn)證碼圖像問(wèn)題的答案

? ? 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;
? ? }

}

驗(yàn)證碼生成漢字識(shí)別的問(wèn)題的文件words.txt
如: 中國(guó)湖北省武漢市漢東大學(xué)政法學(xué)院

驗(yàn)證碼生成算術(shù)運(yùn)算的問(wèn)題的文件words2.txt
123456789+-

提示圖片

登錄效果

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解springboot中的jar包部署步驟

    詳解springboot中的jar包部署步驟

    這篇文章主要介紹了springboot中的jar包部署步驟及l(fā)inux中部署項(xiàng)目常用指令,需要的朋友可以參考下
    2018-07-07
  • 使用Java快速將Web中表格轉(zhuǎn)換成Excel的方法

    使用Java快速將Web中表格轉(zhuǎn)換成Excel的方法

    在平時(shí)做系統(tǒng)項(xiàng)目時(shí),經(jīng)常會(huì)需要做導(dǎo)出功能,下面這篇文章主要給大家介紹了關(guān)于使用Java快速將Web中表格轉(zhuǎn)換成Excel的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • 淺談Java基礎(chǔ)知識(shí)之BigDecimal

    淺談Java基礎(chǔ)知識(shí)之BigDecimal

    我們又來(lái)回顧Java基礎(chǔ)知識(shí)啦,今天講的是BigDecimal的基本使用以及異常處理,下文中有非常詳細(xì)的代碼示例以及注釋哦,需要的朋友可以參考下
    2021-05-05
  • springboot開(kāi)啟Bean數(shù)據(jù)校驗(yàn)功能

    springboot開(kāi)啟Bean數(shù)據(jù)校驗(yàn)功能

    這篇文章主要介紹了springboot開(kāi)啟Bean數(shù)據(jù)校驗(yàn)功能,通過(guò)啟用Bean屬性校驗(yàn)導(dǎo)入JSR303與Hibernate校驗(yàn)框架坐標(biāo),使用@Validated注解啟用校驗(yàn)功能,需要的朋友可以參考下
    2023-10-10
  • SpringBoot 注解事務(wù)聲明式事務(wù)的方式

    SpringBoot 注解事務(wù)聲明式事務(wù)的方式

    springboot使用上述注解的幾種方式開(kāi)啟事物,可以達(dá)到和xml中聲明的同樣效果,但是卻告別了xml,使你的代碼遠(yuǎn)離配置文件。今天就扒一扒springboot中事務(wù)使用注解的玩法,感興趣的朋友一起看看吧
    2017-09-09
  • springboot配置嵌入式servlet容器的方法

    springboot配置嵌入式servlet容器的方法

    這篇文章主要介紹了springboot配置嵌入式servlet容器的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java 讀寫(xiě)鎖實(shí)現(xiàn)原理淺析

    Java 讀寫(xiě)鎖實(shí)現(xiàn)原理淺析

    這篇文章主要介紹了Java 讀寫(xiě)鎖實(shí)現(xiàn)原理淺析,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • 利用Java實(shí)現(xiàn)網(wǎng)站聚合工具

    利用Java實(shí)現(xiàn)網(wǎng)站聚合工具

    互聯(lián)網(wǎng)上有數(shù)以萬(wàn)億計(jì)的網(wǎng)站,每個(gè)網(wǎng)站大都具有一定的功能。搜索引擎雖然對(duì)互聯(lián)網(wǎng)上的部分網(wǎng)站建立了索引,但是其作為一個(gè)大而全的搜索系統(tǒng),無(wú)法很好的定位到一些特殊的需求。因此本文將介紹一個(gè)用java實(shí)現(xiàn)的網(wǎng)站數(shù)據(jù)聚合工具,需要的可以參考一下
    2022-01-01
  • 基于Feign使用okhttp的填坑之旅

    基于Feign使用okhttp的填坑之旅

    這篇文章主要介紹了基于Feign使用okhttp的填坑之旅,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Java main方法String[]args原理實(shí)例解析

    Java main方法String[]args原理實(shí)例解析

    這篇文章主要介紹了Java main方法String[]args原理實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06

最新評(píng)論