Java事件处理机制

基本说明:

Java事件处理是采取"委派事件模型",当事件发生时,产生事件的对象,会把此"信息"传递给"事件的监听者"处理,这里所说的"信息"实际上就是java.awt.event事件类库里某个类所创建的对象,把它称为"事件的对象"

复制代码

介绍事件源,事件,事件监听器:

1.事件源:事件源是一个产生事件的对象,比如按钮,窗口等

2.事件:事件就是承载事件源状态改变时的对象,比如当键盘事件,鼠标事件,窗口事件等等,会生成一个事件对象,该对象保存着当前事件很多信息,比如KeyEvent对象有含义被按下键的Code值.Java,awt.event包和javax.swing.event包中定义了各种事件类型

事件监听器接口(如KeyListener):

1)当事件源产生一个事件,可以传送给事件监听者处理

2)事件监听者实际上就是一个类,该类实现了某个事件监听器接口 比如前面的MyPanle就是一个类,当该类实现KeyListener接口就可以作为一个事件监听者,对接受到的事件进行处理

3)事件监听器接口有很多种,不同的事件监听器接口可以监听不同的事件,一个类可以实现多个监听接口

4)这些接口在java.awt.event包和javax.swing.event包中被定义

java 复制代码
package com.TankGame.TankGame01;

import javax.swing.*;
import java.awt.*;

//坦克大战的绘图区域
public class MyPanel extends JPanel {
    //定义我的坦克
    MyTank myTank = null;
    public MyPanel(){
        myTank = new MyTank(100,100);//初始化自己的坦克
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.fillRect(0,0,1000,750);//填充矩形,默认是黑的

        //画出坦克(方法)
        drawTank(myTank.getX(),myTank.getY(),g,0,0);//更改坦克类型需要将最后一位数字改变

    }
    //编写方法画出坦克
    //x,y为坦克左上角横纵坐标
    //g就是画笔
    //direct方向,上下左右
    //type坦克类型
    public void drawTank(int x,int y,Graphics g,int direct,int type){
        //根据不同坦克设置颜色
        switch(type){
            case 0: //自己的坦克
                g.setColor(Color.cyan);
                break;
            case 1: //敌人坦克
                g.setColor(Color.yellow);
                break;
        }
        //根据坦克的方向,来绘制坦克
        switch(direct){
            case 0: //向上
                g.fill3DRect(x,y,10,60,false);  //画出坦克左边轮子
                g.fill3DRect(x + 30,y,10,60,false);  //画出坦克右边轮子
                g.fill3DRect(x + 10,y + 10,20,40,false);  //画出坦克盖子
                g.fillOval(x + 9,y + 19,20,20);    //画出圆形盖子
                //g.drawLine(x + 19,y + 30,x + 19,y - 10); //画出炮筒
                g.drawLine(x + 19,y + 30,x + 19,y + 80);  //何晨光的炮筒

                //火箭模型
                g.fill3DRect(x + 100,y + 150,30,200,false);
                g.fillOval(x + 15,y + 300,100,100);
                g.fillOval(x + 110,y + 300,100,100);

                break;
            default:
                System.out.println("网络卡顿,请稍后再试......");
        }
    }
}
相关推荐
木木子2212 分钟前
# 星座配对深度解析:Select 长列表选择器、矩阵评分算法与数据驱动建议
java·算法·华为·矩阵·harmonyos
摇滚侠15 分钟前
云原生 Java 架构师的第一课 K8s+Docker+KubeSphere+DevOps 51-60
java·云原生·kubernetes
折哥的程序人生 · 物流技术专研16 分钟前
第4篇:模板方法 vs 策略模式,面试怎么选?
java·设计模式·策略模式·行为型模式·模版方法模式·扩充系列·继承v组合
asdzx6721 分钟前
C# 通过模板生成 Word 文档:文本与图片占位符替换完整攻略
开发语言·c#·word
wbs_scy23 分钟前
仿 muduo 高并发服务器项目:实现轻量级日志宏,方便后续网络库调试
开发语言·php
Huangjin007_26 分钟前
【C++11篇(四)】新的类功能、lambda 与包装器详解
开发语言·c++
2zcode27 分钟前
基于MATLAB图像处理的啤酒瓶口缺陷检测系统设计与实现
开发语言·图像处理·matlab
进击的程序猿~33 分钟前
Go Zero源码阅读2
开发语言·后端·golang
hdsoft_huge38 分钟前
JDK系列19:JVM全维度调优实战,内存、元空间、线程栈、GC参数压测调优完整方案
java·开发语言·jvm
三川69840 分钟前
Tkinter库的学习记录02-Label
python