Java绘制验证码

来源:互联网 发布:前端工程师和美工 编辑:程序博客网 时间:2024/06/05 02:34

java绘制验证码源码如下:包括一个JFrame继承类,一个JPanel继承类。

Main.java

package game;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;public class Main extends JFrame {private MyPanel panel;private JButton button;private ActionListener listener;public Main(){initial();this.setSize(300,300);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}private void initial() {createComponent();layoutComponent();listener();}private void createComponent() {button = new JButton("change");panel = new MyPanel();}private void layoutComponent() {this.add(panel, BorderLayout.CENTER);this.add(button, BorderLayout.SOUTH);button.setActionCommand("change");}private void listener() {listener = new ActionListener() {public void actionPerformed(ActionEvent e) {String command = e.getActionCommand();if (command.equals("change")){repaint();}}};button.addActionListener(listener);}public static void main(String[] args) {Main test = new Main();}}
MyPanel.java如下

package game;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.util.ArrayList;import java.util.Random;import javax.swing.JPanel;public class MyPanel extends JPanel {private BufferedImage img;private static final int WIDTH = 180;private static final int HEIGHT = 40;public MyPanel() {}@Overridepublic void paint(Graphics g1) {String[] fonts = { "仿宋_GB2312", "方正舒体", "黑体", "华文彩云", "华文彩云", "隶书","宋体", "华文新魏", "微软雅黑", "幼圆,Arial", "Calibri", "Dotum","Algerian", "Broadway", "Curlz MT", "Brush Script MT","Elephant" };img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);Graphics g = img.getGraphics();//设置背景颜色为白色g.setColor(Color.WHITE);g.fillRect(0, 0, WIDTH, HEIGHT);//画一个黑色的边框g.setColor(Color.BLACK);g.drawRect(0, 0, WIDTH - 1, HEIGHT - 1);int x = 20;int y = 30;Random rn = new Random();ArrayList<Integer> list = new ArrayList<Integer>();//5个随机数for (int i = 0; i < 5; i++) {int n = rn.nextInt(10);list.add(n);}//用不同的字体和颜色画每一个数字for (int i = 0; i < list.size(); i++) {int fi = rn.nextInt(fonts.length);Font font = new Font(fonts[fi], Font.ITALIC, 27);g.setFont(font);Color color = new Color(rn.nextInt(256), rn.nextInt(256),rn.nextInt(256));g.setColor(color);g.drawString(String.valueOf(list.get(i)), x, y);x += 30;}// 干扰线for (int i = 0; i < 50; i++) {int x1 = rn.nextInt(WIDTH);int y1 = rn.nextInt(HEIGHT);int x2 = rn.nextInt(WIDTH);int y2 = rn.nextInt(HEIGHT);Color c = new Color(rn.nextInt(256), rn.nextInt(256),rn.nextInt(256), rn.nextInt(50) + 50);g.setColor(c);g.drawLine(x1, y1, x2, y2);}g1.drawImage(img, 50, 50, WIDTH, HEIGHT, null);}}



0 0
原创粉丝点击