AWT绘图之验证码

/*
 * 如果想要关闭窗口,就需要通过事件处理机制对窗口进行监听
 * 事件处理机制专门用于响应用户的操作,例如想要响应用户的单击鼠标等操作
 * 事件对象:封装了GUI组件上发生的特定事件(通常就是用户的一次操作)
 * 事件源:事件发生的场所,就是产生事件的组件
 * 监听源:负责监听事件源上发生的事,并对各种事件作出相应处理的对象(对象中包含事件处理器)
 * 事件处理器:监听器对象对接受的事件对象进行相应处理的方法
 */

/*
     * 在程序中如果想实现事件的监听机制,则先定义一个实现了事件监听器的类,如Window类型的窗口需要实现WindowListener。
     * 接着通过addWindowListener()方法为事件源注册事件监听器对象,当事件源上发生事件时,
     * 便会触发事件监听器对象,由事件监听器调用相应的方法来处理相应的事件
     */
public class AWTHuiTu{
    public static void main(String[] args) {
        Frame f = new Frame("验证码");
        MyPanel mp = new MyPanel();
        f.add(mp);
        f.setSize(200, 100);
//        窗口位置设置为空,即默认居中
        f.setLocationRelativeTo(null);
        f.setVisible(true);
//        创建WindowListener实例对象,监听窗体事件
        My4WindowListener mw = new My4WindowListener();
        f.addWindowListener(mw);
    }
}

class MyPanel extends Panel {
    public void paint(Graphics g) {
        int width = 160;// 设置验证码图片宽度
        int height = 40;// 设置验证码图片高度
        g.setColor(Color.LIGHT_GRAY);// 设置上下文颜色
        g.fillRect(0, 0, width, height);// 填充验证码背景
        g.setColor(Color.BLACK);// 设置上下文颜色
        g.drawRect(0, 0, width - 1, height - 1);// 绘制边框
//绘制干扰点
        Random r = new Random();
        for (int i = 0; i < 100; i++) {
            int x = r.nextInt(width) - 2;
            int y = r.nextInt(height) - 2;
            g.drawOval(x, y, 2, 2);
        }
//设置验证码字体
        g.setFont(new Font("黑体", Font.BOLD, 30));
        g.setColor(Color.BLUE);// 设置验证码颜色
//产生随机验证码
        char[] chars = ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();
//创建字符串缓冲区对象
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            int pos = r.nextInt(chars.length);
            char c = chars[pos];
            sb.append(c + " ");
        }
        g.drawString(sb.toString(), 20, 30);// 写入验证码
    }
}
//创建WindowListener类实现WindowListener接口
class My4WindowListener implements WindowListener{
//    监听器监听事件对象作出处理
    public void windowClosing(WindowEvent e) {
        Window wd = e.getWindow();
        wd.setVisible(true);
        System.out.println("windowClosing窗体正在关闭事件");
        //释放窗体
        wd.dispose();
    }

    @Override
    public void windowActivated(WindowEvent arg0) {
        
        System.out.println("windowActivated窗体激活事件");
    }

    @Override
    public void windowClosed(WindowEvent arg0) {
        
        System.out.println("windowClosed窗体关闭事件");
    }
    @Override
    public void windowDeactivated(WindowEvent arg0) {
        
        System.out.println("windowDeactivated窗体停用事件");
    }

    @Override
    public void windowDeiconified(WindowEvent arg0) {
        
        System.out.println("windowDeiconified窗体取消图标化事件");
    }

    @Override
    public void windowIconified(WindowEvent arg0) {
        
        System.out.println("windowIconified窗体图标化事件");
    }

    @Override
    public void windowOpened(WindowEvent arg0) {
        
        System.out.println("windowOpened窗体打开事件");
    }
}

如有不懂可私聊,如有更好的逻辑方式,可再评论区留言,请指教

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值