日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java Swing中随机验证码的实现

發(fā)布時(shí)間:2023/12/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java Swing中随机验证码的实现 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

LoginJFrame:(登錄界面)

package com.myproject.ui;import java.awt.Color; import java.awt.Container; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;import javax.swing.BorderFactory; 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 com.myproject.bean.User; import com.myproject.uiutils.ValidCode; import com.myproject.userdao.UserDAOFactory;public class LoginJFrame extends JFrame {private static final long serialVersionUID = 1L;private JLabel lb_backgroud;// 背景private JLabel label = new JLabel("目標(biāo)管理系統(tǒng)");private JLabel username = new JLabel("用戶名:");private JLabel password = new JLabel("密 碼:");private JLabel validcode = new JLabel("驗(yàn)證碼:");private JPanel jp1 = new JPanel();// 標(biāo)題面板private JTextField jtf_user = new JTextField();private JPasswordField jpf_pwd = new JPasswordField();private JTextField jtf_code = new JTextField();private JButton btn_login = new JButton("登錄");private JButton btn_regist = new JButton("注冊(cè)");private ValidCode vcode;public LoginJFrame() {showUI();BtnLoginAddActionListener();setBackgroudImage();}/*** 初始化登錄窗體背景*/private void setBackgroudImage() {((JPanel) this.getContentPane()).setOpaque(false);ImageIcon img = new ImageIcon("images/beijing1.jpg"); // 添加圖片lb_backgroud = new JLabel(img);this.getLayeredPane().add(lb_backgroud, new Integer(Integer.MIN_VALUE));lb_backgroud.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());}private void showUI() {this.setTitle("南華大學(xué)目標(biāo)管理系統(tǒng)");this.setSize(450, 350);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setLocationRelativeTo(null);Container c = this.getContentPane();c.setLayout(null);label.setFont(new Font("宋體", 0, 30));// jp1.setBackground(Color.gray);jp1.add(label);jp1.setBounds(100, 30, 250, 45);jp1.setOpaque(false);c.add(jp1);username.setBounds(80, 90, 60, 40);password.setBounds(80, 140, 60, 40);validcode.setBounds(80, 190, 60, 40);jtf_user.setBounds(140, 90, 180, 40);jtf_user.setOpaque(false);jpf_pwd.setBounds(140, 140, 180, 40);jpf_pwd.setOpaque(false);jtf_code.setBounds(140, 190, 100, 40);btn_login.setBounds(120, 250, 80, 40);setJButton(btn_login);btn_regist.setBounds(220, 250, 80, 40);setJButton(btn_regist);c.add(username);c.add(password);c.add(validcode);c.add(jtf_user);c.add(jpf_pwd);c.add(jtf_code);vcode = new ValidCode();vcode.setBounds(240, 190, 80, 40);c.add(vcode);c.add(btn_login);c.add(btn_regist);this.setVisible(true);}/*** 為了適應(yīng)各種不同尺寸大小的窗口都能顯示在屏幕中間位置,相當(dāng)于setLocationRelativeTo(null) private void* setCenter(){ Toolkit toolkit = Toolkit.getDefaultToolkit(); Dimension d =* toolkit.getScreenSize(); int x = (int)(d.getWidth()-getWidth())/2; int y* = (int)(d.getHeight()-getHeight())/2; this.setLocation(x, y); }*//*** 給登錄按鈕添加監(jiān)聽(tīng)*/public void BtnLoginAddActionListener() {btn_login.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (!isValidCodeRight()) {JOptionPane.showMessageDialog(LoginJFrame.this, "驗(yàn)證碼錯(cuò)誤!");}if (isValidCodeRight()) {String userName = jtf_user.getText();String passWord = String.valueOf(jpf_pwd.getPassword());User user = new User();user.setUsername(userName);user.setPassword(passWord);Boolean flag = false;try {flag = UserDAOFactory.getUserDAOInstance().findLogin(user);} catch (Exception e1) {e1.printStackTrace();}// 判斷if (!flag) {JOptionPane.showMessageDialog(LoginJFrame.this,"用戶名或密碼錯(cuò)誤,請(qǐng)重輸!");} else {System.out.println("登錄成功!!!");new MainJFrame().init();LoginJFrame.this.dispose();}}}});}/*** 給注冊(cè)按鈕添加監(jiān)聽(tīng)*/public void BtnRegistAddActionListener() {btn_regist.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {}});}/*** 設(shè)置按鈕風(fēng)格:透明* * @param btn*/private void setJButton(JButton btn) {btn.setBackground(new Color(102, 0, 204));// 紫色btn.setFont(new Font("Dialog", Font.BOLD, 24));btn.setOpaque(false);btn.setBorder(BorderFactory.createEmptyBorder());}/*** 驗(yàn)證碼的校驗(yàn)* * @return*/public boolean isValidCodeRight() {if (jtf_code == null) {return false;}if (vcode == null) {return true;}if (vcode.getCode().equals(jtf_code.getText())) {return true;}return false;}}
ValidCode:隨機(jī)驗(yàn)證碼的實(shí)現(xiàn)類

package non.zy.login;import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.geom.AffineTransform; import java.util.Random;import javax.swing.JComponent;public class ValidCode extends JComponent implements MouseListener {private String code;private int width, height = 40;private int codeLength = 4;private Random random = new Random();public ValidCode() {width = this.codeLength * 16 + (this.codeLength - 1) * 10;setPreferredSize(new Dimension(width, height));setSize(width, height);this.addMouseListener(this);setToolTipText("點(diǎn)擊可以更換驗(yàn)證碼");}public int getCodeLength() {return codeLength;}/*設(shè)置驗(yàn)證碼文字的長(zhǎng)度*/public void setCodeLength(int codeLength) {if(codeLength < 4) {this.codeLength = 4;} else {this.codeLength = codeLength;}}public String getCode() {return code;}/*產(chǎn)生隨機(jī)的顏色*/public Color getRandColor(int min, int max) {if (min > 255)min = 255;if (max > 255)max = 255;int red = random.nextInt(max - min) + min;int green = random.nextInt(max - min) + min;int blue = random.nextInt(max - min) + min;return new Color(red, green, blue);}/*設(shè)置驗(yàn)證碼具體的字母是什么*/protected String generateCode() {char[] codes = new char[this.codeLength];for (int i = 0, len = codes.length; i < len; i++) {if (random.nextBoolean()) {codes[i] = (char) (random.nextInt(26) + 65);} else {codes[i] = (char) (random.nextInt(26) + 97);}}this.code = new String(codes);return this.code;}@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);if(this.code == null || this.code.length() != this.codeLength) {this.code = generateCode();}width = this.codeLength * 16 + (this.codeLength - 1) * 10;super.setSize(width, height);super.setPreferredSize(new Dimension(width, height));Font mFont = new Font("Arial", Font.BOLD | Font.ITALIC, 25);g.setFont(mFont);//繪制出驗(yàn)證碼的背景的矩形輪廓Graphics2D g2d = (Graphics2D) g;g2d.setColor(getRandColor(200, 250));g2d.fillRect(0, 0, width, height);g2d.setColor(getRandColor(180, 200));g2d.drawRect(0, 0, width - 1, height - 1);//繪制出驗(yàn)證碼背景的線int i = 0, len = 150;for (; i < len; i++) {int x = random.nextInt(width - 1);int y = random.nextInt(height - 1);int x1 = random.nextInt(width - 10) + 10;int y1 = random.nextInt(height - 4) + 4;g2d.setColor(getRandColor(180, 200));g2d.drawLine(x, y, x1, y1);}/*i = 0; len = 300;for (; i < len; i++) {int x = random.nextInt(width);int y = random.nextInt(height);g2d.setColor(getRandColor(150, 180));g2d.drawRect(x, y, 0, 0);}*///繪制出驗(yàn)證碼的具體字母i = 0; len = this.codeLength;FontMetrics fm = g2d.getFontMetrics();int base = (height - fm.getHeight())/2 + fm.getAscent();for(;i<len;i++) {int b = random.nextBoolean() ? 1 : -1;g2d.rotate(random.nextInt(10)*0.01*b);g2d.setColor(getRandColor(20, 130));g2d.drawString(code.charAt(i)+"", 16 * i + 10, base);}}//下一個(gè)驗(yàn)證碼public void nextCode() {generateCode();repaint();}@Overridepublic void mouseClicked(MouseEvent e) {nextCode();}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub} }
界面效果圖:


總結(jié)

以上是生活随笔為你收集整理的java Swing中随机验证码的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。