java Swing中随机验证码的实现
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("目标管理系统");private JLabel username = new JLabel("用户名:");private JLabel password = new JLabel("密 码:");private JLabel validcode = new JLabel("验证码:");private JPanel jp1 = new JPanel();// 标题面板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("注册");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("南华大学目标管理系统");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);}/*** 为了适应各种不同尺寸大小的窗口都能显示在屏幕中间位置,相当于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); }*//*** 给登录按钮添加监听*/public void BtnLoginAddActionListener() {btn_login.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (!isValidCodeRight()) {JOptionPane.showMessageDialog(LoginJFrame.this, "验证码错误!");}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,"用户名或密码错误,请重输!");} else {System.out.println("登录成功!!!");new MainJFrame().init();LoginJFrame.this.dispose();}}}});}/*** 给注册按钮添加监听*/public void BtnRegistAddActionListener() {btn_regist.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {}});}/*** 设置按钮风格:透明* * @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());}/*** 验证码的校验* * @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:随机验证码的实现类
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("点击可以更换验证码");}public int getCodeLength() {return codeLength;}/*设置验证码文字的长度*/public void setCodeLength(int codeLength) {if(codeLength < 4) {this.codeLength = 4;} else {this.codeLength = codeLength;}}public String getCode() {return code;}/*产生随机的颜色*/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);}/*设置验证码具体的字母是什么*/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);//绘制出验证码的背景的矩形轮廓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);//绘制出验证码背景的线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);}*///绘制出验证码的具体字母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);}}//下一个验证码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}
}
界面效果图:
java Swing中随机验证码的实现相关推荐
- swingworker_使用SwingWorker的Java Swing中的多线程
swingworker 如果要使用Swing用Java编写桌面或Java Web Start程序,您可能会觉得需要通过创建自己的线程在后台运行某些程序. 没有什么可以阻止您在Swing中使用标准的 ...
- 使用SwingWorker的Java Swing中的多线程
如果要使用Swing用Java编写桌面或Java Web Start程序,您可能会觉得需要通过创建自己的线程在后台运行某些东西. 没有什么可以阻止您在Swing中使用标准的多线程技术,并且需要遵循 ...
- Java Swing中的聊天气泡
本文将向您解释"如何在Java swing应用程序中绘制聊天气泡?" 聊天气泡与呼出气泡或思想气泡相同. 今天,大多数聊天应用程序都以这种格式显示转换,因此本文将帮助您在用Java ...
- java swing 注册事件_比较Java Swing中三种注册事件的方法
Swing 是目前Java中不可缺少的窗口工具组,是建立图形化用户界面(GUI)程序的强大工具.Java Swing组件自动产生各种事件来响应用户行为.Java将事件封装成事件类,并且为每个事件类定义 ...
- Java Swing中键盘事件的处理
在Java Swing编程过程中,经常需要处理键盘事件,例如处理快捷键等.这里就介绍如何定义键盘事件,以及如何处理这些事件. 在jdk1.2中,分别针对Jcomponent和Text类的对象定制了不同 ...
- Java Swing中JFreeChart构建双纵轴(双Y轴)图表的使用纪要
背景 项目应用中整理纪要,用于参数说明.后抽部分简码以用例,特此纪要! 问题 Java Swing中JFreeChart如何构建双纵轴(双Y轴)图表 说明 JFreeChart是一个工厂类,是Swin ...
- JAVA Swing 中的表格
今天我们来学习一下java swing中的表格怎么来使用 在用swing技术开发系统的时候, 有时候会需要用到表格,那么我们来看看表格是怎么使用的 public class Table1 extend ...
- Java Swing中JFreeChart构建柱状图(非3D)时关于取消柱体的高亮问题的解决纪要?
背景 项目应用中后期的用例Demo,特此纪要! 问题 Java Swing中JFreeChart构建的柱状图(非3D)如何取消柱体的高亮显示? 说明 此Demo中点题的代码就一行,其余的代码段在其他的 ...
- java jbutton边框颜色_在Java Swing中更改JButton的边框颜色,以保留插图
我想更改Java Swing中JButton组件的边框颜色. 我尝试了以下方法: package com.example.test; import java.awt.Color; import jav ...
最新文章
- 【蓝桥java】进制与整除之尼姆堆
- Android模仿iPhone View旋转刷新数据动画详解
- Selenium2+python自动化1(环境安装)
- Kafka代码走读-LogCleaner
- HTML的标签描述11
- 在workflow中,无法为实例 ID“...”传递接口类型“...”上的事件“...” 问题的解决方法。...
- 洛谷 P2951 [USACO09OPEN]捉迷藏Hide and Seek
- postgresql两个列模糊比较_数据分析之SQL优化系列(二)---PostgreSQL 的索引
- [js] 不用 + eval Function 实现加法
- linux如何卸载conky,Linux Deepin 15.10.2 下折腾 简单自制的 Conky Conky-manager
- div中文字,图片居中对齐,兼容FF、IE
- Flask的Rsponse响应对象
- BZOJ 2733: [HNOI2012]永无乡 启发式合并treap
- HDU1013 POJ1519 Digital Roots(解法二)【废除!!!】
- 平台如何限制ip流量_社区团购平台如何通过地推获得更多流量?
- 何川L3管理课_模块5_给评价
- 请详细描述LVS DR模式的原理
- 苹果官网html简单代码,苹果官网CSS3应用案例分析
- 个人博客系统需求文档
- 21节点六自由度梁单元 ,悬臂有限元代码
热门文章
- java instanceof 继承_继承_instanceOf的使用
- 高效程序员的45个习惯 pdf_如何培养孩子高效学习?养成高效学习的7 个习惯。建议收藏...
- 今天刚学了jQuery ,今天利用jQuery的语法一行来写出选项卡
- 学习响应式BootStrap来写融职教育网站,Bootsrtap第九天手粉琴swiper特效
- 解决Failed to load resource: net::ERR_CONNECTION_TIMED_OUT问题
- python将csv一行保存一个txt_Python读写文件(csv、txt、excel)
- 社会化分享插件集成分享
- 爬虫基本原理及Request和Response分析
- maven 构建java项目,jdk版本问题
- 坐下,这些都是二叉树的基本操作!