关于验证码的使用
来源:互联网 发布:濮阳市智慧网络 编辑:程序博客网 时间:2024/05/17 18:00
//1、验证码生成类 其中getImageText() 方法 是用来取出验证码的内容用于使用
package com.jcuckoo.util;import java.awt.Color;import java.awt.Component;import java.awt.Container;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.util.Random;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;/** * @author jcuckoo * 验证码的实现 * 2014-8-14 下午4:13:41 */public class Images extends Component{private StringBuilder imageText=null ;public String img;// 验证码图片的宽度。private int width = 60;// 验证码图片的高度。private int height = 20;// 验证码字符个数private int codeCount = 4;private int x = 0;// 字体高度private int fontHeight;private int codeY;char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W','X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };public Images() {init();ToImages();}/** * 初始化验证图片属性 */public void init() {x = width / (codeCount + 1);fontHeight = height - 2;codeY = height - 4;}public BufferedImage ToImages() {BufferedImage buffImg = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);try {Graphics2D g = buffImg.createGraphics();// 创建一个随机数生成器类Random random = new Random();// 将图像填充为白色g.setColor(Color.WHITE);g.fillRect(0, 0, width, height);// 创建字体,字体的大小应该根据图片的高度来定。Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);// 设置字体。g.setFont(font);// 画边框。g.setColor(Color.BLACK);g.drawRect(0, 0, width - 1, height - 1);// 随机产生30条干扰线,使图象中的认证码不易被其它程序探测到。g.setColor(Color.GRAY);for (int i = 0; i < 30; i++) {int x = random.nextInt(width);int y = random.nextInt(height);int xl = random.nextInt(12);int yl = random.nextInt(12);g.drawLine(x, y, x + xl, y + yl);}// randomCode用于保存随机产生的验证码,以便用户登录进行验证。StringBuffer randomCode = new StringBuffer();int red = 0, green = 0, blue = 0;// 随机产生codeCount数字的验证码。for (int i = 0; i < codeCount; i++) {// 得到随机产生的验证码数字。String strRand = String.valueOf(codeSequence[random.nextInt(36)]);//imageText.append(strRand);// 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。red = random.nextInt(255);green = random.nextInt(255);blue = random.nextInt(255);// 用随机产生的颜色将验证码绘制到图像中。g.setColor(new Color(red, green, blue));g.drawString(strRand, (i + 1) * x, codeY);// 将产生的四个随机数组合在一起。randomCode.append(strRand);}// 将四位数字的验证码保存到Session中。img = randomCode.toString();// System.out.println(img);// BufferedImage image0=ImageIO.read(sourceimage);// System.out.println("img="+img);// ImageIO.write(buffImg, "jpeg", );} catch (Exception e) {e.printStackTrace();}return buffImg;}public String getImageText(){return img ;}/** * @param args */public static void main(String[] args) {Images img = new Images();JFrame jf = new JFrame();jf.setSize(200, 300);Container ct = jf.getContentPane();ImageIcon ii = new ImageIcon(img.ToImages());JLabel jl = new JLabel(ii);ct.add(jl);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setVisible(true);}}
2、关于日历控件的使用
/** * 日历控件 yyyy-MM-dd */package com.jcuckoo.util;import java.awt.BasicStroke;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import java.awt.Cursor;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.GridLayout;import java.awt.Point;import java.awt.Polygon;import java.awt.Stroke;import java.awt.Toolkit;import java.awt.event.FocusEvent;import java.awt.event.FocusListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.List;import javax.swing.BorderFactory;import javax.swing.JComponent;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.PopupFactory;import javax.swing.SwingUtilities;import javax.swing.event.AncestorEvent;import javax.swing.event.AncestorListener;/** * @author jcuckoo * * 2014-8-14 下午3:57:11 */public class Chooser extends JPanel{ private static final long serialVersionUID = -5384012731547358720L; private Calendar calendar; private Calendar now = Calendar.getInstance(); private JPanel calendarPanel; private java.awt.Font font = new java.awt.Font("Times",java.awt.Font.PLAIN,12); private java.text.SimpleDateFormat sdf; private final LabelManager lm = new LabelManager(); private javax.swing.Popup pop; private TitlePanel titlePanel; private BodyPanel bodyPanel; private FooterPanel footerPanel; private JComponent showDate; private boolean isShow = false; private static final String DEFAULTFORMAT = "yyyy-MM-dd"; private static final String[] showTEXT = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; private static WeekLabel[] weekLabels = new WeekLabel[7]; private static int defaultStartDAY = 0;//0 is from Sun, 1 is from Mon, 2 is from Tue private Chooser(java.util.Date date, String format, int startDAY){ if(startDAY > -1 && startDAY < 7) defaultStartDAY = startDAY; int dayIndex = defaultStartDAY; for(int i=0; i<7; i++){ if(dayIndex > 6) dayIndex = 0; weekLabels[i] = new WeekLabel(dayIndex, showTEXT[dayIndex]); dayIndex ++ ; } sdf = new java.text.SimpleDateFormat(format); calendar = Calendar.getInstance(); calendar.setTime(date); initCalendarPanel(); } public static Chooser getInstance(java.util.Date date, String format){ return new Chooser(date, format, defaultStartDAY); } public static Chooser getInstance(java.util.Date date){ return getInstance(date, DEFAULTFORMAT); } public static Chooser getInstance(String format){ return getInstance(new java.util.Date(), format); } public static Chooser getInstance(){ return getInstance(new java.util.Date(), DEFAULTFORMAT); } private void initCalendarPanel(){ calendarPanel = new JPanel(new java.awt.BorderLayout()); calendarPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0xAA, 0xAA, 0xAA))); calendarPanel.add(titlePanel = new TitlePanel(), java.awt.BorderLayout.NORTH); calendarPanel.add(bodyPanel = new BodyPanel(), java.awt.BorderLayout.CENTER); calendarPanel.add(footerPanel = new FooterPanel(),java.awt.BorderLayout.SOUTH); this.addAncestorListener(new AncestorListener() { public void ancestorAdded(AncestorEvent event) { } public void ancestorRemoved(AncestorEvent event) {hidePanel();} //hide pop when move component. public void ancestorMoved(AncestorEvent event) { hidePanel(); } }); } public void register(final JComponent showComponent) { this.showDate = showComponent; showComponent.setRequestFocusEnabled(true); showComponent.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent me) { showComponent.requestFocusInWindow(); } }); this.add(showComponent, BorderLayout.CENTER); this.setPreferredSize(new Dimension(90, 25)); this.setBorder(BorderFactory.createLineBorder(Color.GRAY)); showComponent.addMouseListener(new MouseAdapter() { public void mouseEntered(MouseEvent me) { if (showComponent.isEnabled()) { showComponent.setCursor(new Cursor(Cursor.HAND_CURSOR)); } } public void mouseExited(MouseEvent me) { if (showComponent.isEnabled()) { showComponent.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); showComponent.setForeground(Color.BLACK); } } public void mousePressed(MouseEvent me) { if (showComponent.isEnabled()) { showComponent.setForeground(Color.BLUE); if (isShow) { hidePanel(); } else { showPanel(showComponent); } } } public void mouseReleased(MouseEvent me) { if (showComponent.isEnabled()) { showComponent.setForeground(Color.BLACK); } } }); showComponent.addFocusListener(new FocusListener() { public void focusLost(FocusEvent e) { hidePanel(); } public void focusGained(FocusEvent e) { } }); } //hide the main panel. private void hidePanel() { if (pop != null) { isShow = false; pop.hide(); pop = null; } } //show the main panel. private void showPanel(Component owner) { if (pop != null) pop.hide(); Point show = new Point(0, showDate.getHeight()); SwingUtilities.convertPointToScreen(show, showDate); Dimension size = Toolkit.getDefaultToolkit().getScreenSize(); int x = show.x; int y = show.y; if (x < 0) x = 0; if (x > size.width - 212) x = size.width - 212; if (y > size.height - 167) y -= 165; pop = PopupFactory.getSharedInstance().getPopup(owner, calendarPanel, x, y); pop.show(); isShow = true; } // change text or label's content. private void commit() { if (showDate instanceof JTextField) { ((JTextField) showDate).setText(sdf.format(calendar.getTime())); }else if (showDate instanceof JLabel) { ((JLabel) showDate).setText(sdf.format(calendar.getTime())); } hidePanel(); } // control panel private class TitlePanel extends JPanel { private static final long serialVersionUID = -2865282186037420798L; private JLabel preYear,preMonth,center,nextMonth,nextYear,centercontainer; public TitlePanel(){ super(new java.awt.BorderLayout()); this.setBackground(new java.awt.Color(190, 200, 200)); initTitlePanel(); } private void initTitlePanel(){ preYear = new JLabel("<<", JLabel.CENTER); preMonth = new JLabel("<", JLabel.CENTER); center = new JLabel("", JLabel.CENTER); centercontainer = new JLabel("", JLabel.CENTER); nextMonth = new JLabel(">", JLabel.CENTER); nextYear = new JLabel(">>", JLabel.CENTER); preYear.setToolTipText("Last Year"); preMonth.setToolTipText("Last Month"); nextMonth.setToolTipText("Next Month"); nextYear.setToolTipText("Next Year"); preYear.setBorder(javax.swing.BorderFactory.createEmptyBorder(2, 10, 0, 0)); preMonth.setBorder(javax.swing.BorderFactory.createEmptyBorder(2, 15, 0, 0)); nextMonth.setBorder(javax.swing.BorderFactory.createEmptyBorder(2, 0, 0, 15)); nextYear.setBorder(javax.swing.BorderFactory.createEmptyBorder(2, 0, 0, 10)); centercontainer.setLayout(new java.awt.BorderLayout()); centercontainer.add(preMonth,java.awt.BorderLayout.WEST); centercontainer.add(center,java.awt.BorderLayout.CENTER); centercontainer.add(nextMonth,java.awt.BorderLayout.EAST); this.add(preYear,java.awt.BorderLayout.WEST); this.add(centercontainer,java.awt.BorderLayout.CENTER); this.add(nextYear,java.awt.BorderLayout.EAST); this.setPreferredSize(new java.awt.Dimension(210, 25)); updateDate(); preYear.addMouseListener(new MyMouseAdapter(preYear, Calendar.YEAR, -1)); preMonth.addMouseListener(new MyMouseAdapter(preMonth, Calendar.MONTH, -1)); nextMonth.addMouseListener(new MyMouseAdapter(nextMonth, Calendar.MONTH, 1)); nextYear.addMouseListener(new MyMouseAdapter(nextYear, Calendar.YEAR, 1)); } private void updateDate() { center.setText(calendar.get(Calendar.YEAR)+"-"+(calendar.get(Calendar.MONTH) + 1)); } // listener for control label. class MyMouseAdapter extends java.awt.event.MouseAdapter{ JLabel label; private int type, value; public MyMouseAdapter(final JLabel label, final int type, final int value){ this.label = label; this.type = type; this.value = value; } public void mouseEntered(java.awt.event.MouseEvent me) { label.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); label.setForeground(java.awt.Color.RED); } public void mouseExited(java.awt.event.MouseEvent me) { label.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); label.setForeground(java.awt.Color.BLACK); } public void mousePressed(java.awt.event.MouseEvent me) { calendar.add(type, value); label.setForeground(java.awt.Color.WHITE); refresh(); } public void mouseReleased(java.awt.event.MouseEvent me) { label.setForeground(java.awt.Color.BLACK); } } } // body panel, include week labels and day labels. private class BodyPanel extends JPanel { private static final long serialVersionUID = 5677718768457235447L; public BodyPanel(){ super(new GridLayout(7, 7)); this.setPreferredSize(new java.awt.Dimension(210, 140)); initMonthPanel(); } private void initMonthPanel(){ updateDate(); } public void updateDate() { this.removeAll(); lm.clear(); java.util.Date temp = calendar.getTime(); Calendar cal = Calendar.getInstance(); cal.setTime(temp); cal.set(Calendar.DAY_OF_MONTH, 1); int index = cal.get(Calendar.DAY_OF_WEEK); cal.add(Calendar.DAY_OF_MONTH, defaultStartDAY - index); for (WeekLabel weekLabel : weekLabels) { this.add(weekLabel); } for (int i = 0; i < 42; i++) { cal.add(Calendar.DAY_OF_MONTH, 1); lm.addLabel(new DayLabel(cal)); } for (DayLabel my : lm.getLabels()) { this.add(my); } } } private class FooterPanel extends JPanel { private static final long serialVersionUID = 8135037333899746736L; private JLabel dateLabel; public FooterPanel(){ super(new BorderLayout()); initFooterPanel(); } private void initFooterPanel(){ dateLabel = new JLabel("Today is : "+sdf.format(new java.util.Date())); dateLabel.addMouseListener(new MouseListener() { @Override public void mouseReleased(MouseEvent e) {} @Override public void mousePressed(MouseEvent e) { calendar.setTime(new Date()); refresh(); commit(); } @Override public void mouseExited(MouseEvent e) { dateLabel.setForeground(Color.BLACK); } @Override public void mouseEntered(MouseEvent e) { dateLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); dateLabel.setForeground(Color.CYAN); } @Override public void mouseClicked(MouseEvent e) {} }); this.add(dateLabel); } public void updateDate(){}; } //refresh all panel private void refresh() { titlePanel.updateDate(); bodyPanel.updateDate(); footerPanel.updateDate(); SwingUtilities.updateComponentTreeUI(this); } private class WeekLabel extends JLabel { private static final long serialVersionUID = -8053965084432740110L; private String name; public WeekLabel(int index, String name){ super(name, JLabel.CENTER); this.name = name; } public String toString(){ return name; } } private class DayLabel extends JLabel implements java.util.Comparator<DayLabel>, java.awt.event.MouseListener, java.awt.event.MouseMotionListener { private static final long serialVersionUID = -6002103678554799020L; private boolean isSelected; private int year, month, day; public DayLabel(Calendar cal){ super(""+cal.get(Calendar.DAY_OF_MONTH), JLabel.CENTER); this.year = cal.get(Calendar.YEAR); this.month = cal.get(Calendar.MONTH); this.day = cal.get(Calendar.DAY_OF_MONTH); this.setFont(font); this.addMouseListener(this); this.addMouseMotionListener(this); if(month == calendar.get(Calendar.MONTH)) this.setForeground(java.awt.Color.BLACK); else this.setForeground(java.awt.Color.LIGHT_GRAY); } public boolean getIsSelected() { return isSelected; } public void setSelected(boolean b, boolean isDrag) { isSelected = b; if (b && !isDrag) { int temp = calendar.get(Calendar.MONTH); calendar.set(year, month, day); if (temp == month) { SwingUtilities.updateComponentTreeUI(bodyPanel); } else { refresh(); } this.repaint(); } } @Override protected void paintComponent(Graphics g) { //set curr select day's background if(day == calendar.get(Calendar.DAY_OF_MONTH) && month == calendar.get(Calendar.MONTH)){ g.setColor(new java.awt.Color(0xBB, 0xBF, 0xDA)); g.fillRect(0, 0, getWidth(), getHeight()); } //set current day's border if(year == now.get(Calendar.YEAR) && month == now.get(Calendar.MONTH) && day == now.get(Calendar.DAY_OF_MONTH)){ Graphics2D gd = (Graphics2D) g; gd.setColor(new java.awt.Color(0x55, 0x55, 0x88)); Polygon p = new Polygon(); p.addPoint(0, 0); p.addPoint(getWidth() - 1, 0); p.addPoint(getWidth() - 1, getHeight() - 1); p.addPoint(0, getHeight() - 1); gd.drawPolygon(p); } if (isSelected){ Stroke s = new BasicStroke(1.0f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_BEVEL, 1.0f, new float[] { 2.0f, 2.0f }, 1.0f); Graphics2D gd = (Graphics2D) g; gd.setStroke(s); gd.setColor(Color.BLACK); Polygon p = new Polygon(); p.addPoint(0, 0); p.addPoint(getWidth() - 1, 0); p.addPoint(getWidth() - 1, getHeight() - 1); p.addPoint(0, getHeight() - 1); gd.drawPolygon(p); } super.paintComponent(g); } public boolean contains(Point p) { return this.getBounds().contains(p); } private void update() { repaint(); } @Override public void mouseDragged(MouseEvent e) { } @Override public void mouseMoved(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { isSelected = true; update(); } @Override public void mouseReleased(MouseEvent e) { Point p = SwingUtilities.convertPoint(this, e.getPoint(), bodyPanel); this.setForeground(Color.BLACK); lm.setSelect(p, false); commit(); } @Override // change color when mouse over. public void mouseEntered(MouseEvent e) { this.setForeground(Color.CYAN); this.repaint(); } @Override // change color when mouse exit. public void mouseExited(MouseEvent e) { if(month == calendar.get(Calendar.MONTH)) this.setForeground(java.awt.Color.BLACK); else this.setForeground(java.awt.Color.LIGHT_GRAY); this.repaint(); } @Override public int compare(DayLabel o1, DayLabel o2) { Calendar c1 = Calendar.getInstance(); c1.set(o1.year, o1.month, o1.day); Calendar c2 = Calendar.getInstance(); c2.set(o2.year, o2.month, o2.day); return c1.compareTo(c2); } } private class LabelManager { private List<DayLabel> list; public LabelManager(){ list = new ArrayList<Chooser.DayLabel>(); } public List<DayLabel> getLabels(){ return list; } public void addLabel(DayLabel label){ list.add(label); } public void clear() { list.clear(); } public void setSelect(Point p, boolean b) { //如果是拖动,则要优化一下,以提高效率 if (b) { //表示是否能返回,不用比较完所有的标签,能返回的标志就是把上一个标签和 //将要显示的标签找到了就可以了 boolean findPrevious = false, findNext = false; for (DayLabel lab : list) { if (lab.contains(p)) { findNext = true; if (lab.getIsSelected()) findPrevious = true; else lab.setSelected(true, b); } else if (lab.getIsSelected()) { findPrevious = true; lab.setSelected(false, b); } if (findPrevious && findNext) return; } }else { DayLabel temp = null; for (DayLabel m : list) { if (m.contains(p)) { temp = m; } else if (m.getIsSelected()) { m.setSelected(false, b); } } if (temp != null) temp.setSelected(true, b); } } } /** * @param args */ public static void main(String[] args) { JFrame jf = new JFrame("Date Picker Test"); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setLayout(null); jf.setBounds(400, 200, 600, 400); Chooser ser = Chooser.getInstance(); javax.swing.JTextField text = new JTextField(); text.setBounds(10, 10, 200, 30); text.setText("2013-10-11"); ser.register(text); Chooser ser2 = Chooser.getInstance("yyyy年MM月dd日"); JLabel label = new JLabel("please click me."); label.setBounds(10, 50, 200, 30); ser2.register(label); jf.add(text); jf.add(label); jf.setVisible(true); }}
0 0
- 关于验证码的使用
- 关于Captcha验证码组件的使用
- 关于GWT使用servlet的图形验证码
- js表单验证中关于验证码的验证
- 关于验证码的问题
- 关于验证码的问题
- 关于验证码的应用
- 验证码的使用
- 验证码的使用
- 验证码的使用
- 验证码的使用
- 验证码的使用
- 关于yii的验证码的生成
- 关于在前端验证后端生成的验证码
- 关于xUtil3服务器图片验证码验证失败的问题。
- 关于在S2SH框架中使用servlet的验证码进行配置
- 关于验证码插件-kaptcha不能在html中使用的解决办法
- 一个关于内存使用变化规律的猜想与验证
- QTP自动化测试之VBScript基础
- Heat Providers
- 用递归颠倒一个栈
- 立体匹配中ZNCC的积分图加速方法
- 摘
- 关于验证码的使用
- 并查集
- HDU 1279 验证角谷猜想
- 树的直径 Codeforces Round #260 (Div. 2)E
- HTML5的学习记录
- Oracle hash分区的秘密
- [POJ 2762]Going from u to v or from v to u? (强连通分量+拓扑排序)
- 我只是来存捡来的大数模板的...
- tomcat的启动