java實(shí)現(xiàn)登錄窗口
本文實(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)文章
使用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
我們又來(lái)回顧Java基礎(chǔ)知識(shí)啦,今天講的是BigDecimal的基本使用以及異常處理,下文中有非常詳細(xì)的代碼示例以及注釋哦,需要的朋友可以參考下2021-05-05springboot開(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-10SpringBoot 注解事務(wù)聲明式事務(wù)的方式
springboot使用上述注解的幾種方式開(kāi)啟事物,可以達(dá)到和xml中聲明的同樣效果,但是卻告別了xml,使你的代碼遠(yuǎn)離配置文件。今天就扒一扒springboot中事務(wù)使用注解的玩法,感興趣的朋友一起看看吧2017-09-09Java 讀寫(xiě)鎖實(shí)現(xiàn)原理淺析
這篇文章主要介紹了Java 讀寫(xiě)鎖實(shí)現(xiàn)原理淺析,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08利用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-01Java main方法String[]args原理實(shí)例解析
這篇文章主要介紹了Java main方法String[]args原理實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06