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中随机验证码的实现相关推荐

  1. swingworker_使用SwingWorker的Java Swing中的多线程

    swingworker 如果要使用Swing用J​​ava编写桌面或Java Web Start程序,您可能会觉得需要通过创建自己的线程在后台运行某些程序. 没有什么可以阻止您在Swing中使用标准的 ...

  2. 使用SwingWorker的Java Swing中的多线程

    如果要使用Swing用J​​ava编写桌面或Java Web Start程序,您可能会觉得需要通过创建自己的线程在后台运行某些东西. 没有什么可以阻止您在Swing中使用标准的多线程技术,并且需要遵循 ...

  3. Java Swing中的聊天气泡

    本文将向您解释"如何在Java swing应用程序中绘制聊天气泡?" 聊天气泡与呼出气泡或思想气泡相同. 今天,大多数聊天应用程序都以这种格式显示转换,因此本文将帮助您在用Java ...

  4. java swing 注册事件_比较Java Swing中三种注册事件的方法

    Swing 是目前Java中不可缺少的窗口工具组,是建立图形化用户界面(GUI)程序的强大工具.Java Swing组件自动产生各种事件来响应用户行为.Java将事件封装成事件类,并且为每个事件类定义 ...

  5. Java Swing中键盘事件的处理

    在Java Swing编程过程中,经常需要处理键盘事件,例如处理快捷键等.这里就介绍如何定义键盘事件,以及如何处理这些事件. 在jdk1.2中,分别针对Jcomponent和Text类的对象定制了不同 ...

  6. Java Swing中JFreeChart构建双纵轴(双Y轴)图表的使用纪要

    背景 项目应用中整理纪要,用于参数说明.后抽部分简码以用例,特此纪要! 问题 Java Swing中JFreeChart如何构建双纵轴(双Y轴)图表 说明 JFreeChart是一个工厂类,是Swin ...

  7. JAVA Swing 中的表格

    今天我们来学习一下java swing中的表格怎么来使用 在用swing技术开发系统的时候, 有时候会需要用到表格,那么我们来看看表格是怎么使用的 public class Table1 extend ...

  8. Java Swing中JFreeChart构建柱状图(非3D)时关于取消柱体的高亮问题的解决纪要?

    背景 项目应用中后期的用例Demo,特此纪要! 问题 Java Swing中JFreeChart构建的柱状图(非3D)如何取消柱体的高亮显示? 说明 此Demo中点题的代码就一行,其余的代码段在其他的 ...

  9. java jbutton边框颜色_在Java Swing中更改JButton的边框颜色,以保留插图

    我想更改Java Swing中JButton组件的边框颜色. 我尝试了以下方法: package com.example.test; import java.awt.Color; import jav ...

最新文章

  1. 【蓝桥java】进制与整除之尼姆堆
  2. Android模仿iPhone View旋转刷新数据动画详解
  3. Selenium2+python自动化1(环境安装)
  4. Kafka代码走读-LogCleaner
  5. HTML的标签描述11
  6. 在workflow中,无法为实例 ID“...”传递接口类型“...”上的事件“...” 问题的解决方法。...
  7. 洛谷 P2951 [USACO09OPEN]捉迷藏Hide and Seek
  8. postgresql两个列模糊比较_数据分析之SQL优化系列(二)---PostgreSQL 的索引
  9. [js] 不用 + eval Function 实现加法
  10. linux如何卸载conky,Linux Deepin 15.10.2 下折腾 简单自制的 Conky Conky-manager
  11. div中文字,图片居中对齐,兼容FF、IE
  12. Flask的Rsponse响应对象
  13. BZOJ 2733: [HNOI2012]永无乡 启发式合并treap
  14. HDU1013 POJ1519 Digital Roots(解法二)【废除!!!】
  15. 平台如何限制ip流量_社区团购平台如何通过地推获得更多流量?
  16. 何川L3管理课_模块5_给评价
  17. 请详细描述LVS DR模式的原理
  18. 苹果官网html简单代码,苹果官网CSS3应用案例分析
  19. 个人博客系统需求文档
  20. 21节点六自由度梁单元 ,悬臂有限元代码

热门文章

  1. java instanceof 继承_继承_instanceOf的使用
  2. 高效程序员的45个习惯 pdf_如何培养孩子高效学习?养成高效学习的7 个习惯。建议收藏...
  3. 今天刚学了jQuery ,今天利用jQuery的语法一行来写出选项卡
  4. 学习响应式BootStrap来写融职教育网站,Bootsrtap第九天手粉琴swiper特效
  5. 解决Failed to load resource: net::ERR_CONNECTION_TIMED_OUT问题
  6. python将csv一行保存一个txt_Python读写文件(csv、txt、excel)
  7. 社会化分享插件集成分享
  8. 爬虫基本原理及Request和Response分析
  9. maven 构建java项目,jdk版本问题
  10. 坐下,这些都是二叉树的基本操作!