美文网首页
日志8.27:监听机制

日志8.27:监听机制

作者: 莫唁 | 来源:发表于2015-08-28 01:43 被阅读39次

今天复习了一下监听的内容,然后自己尝试写了写代码,总算勉强能把坦克大战的初步版代码写出来了,估计再过几天就能编出这款小游戏了,继续努力。下面是今天的总结:


1.事件编程的步骤:

a.编写事件处理类(事件监听者);

b.根据需求给事件处理类实现监听器接口;

c.在事件处理类中重写(实现)事件处理的函数;

d.在事件源类中指定该事件的监听器(响应者)是谁,即注册监听。

2.总结注意事项:

a.java采用“委托”机制处理事件;

b.java中的事件是分类的,比如对窗体事件、鼠标事件、按键事件、操作事件【按按钮】;

c.java中的一个类要监听某个事件,则必须实现相对应的事件监听接口;

d.事件监听接口有多种,程序员应当根据不同的情况实现不同的监听接口,比如监听鼠标事件,就应当实现MouseListener;

e.在实现监听接口的类(事件监听者/类)中,需要重写函数,比如实现了ActionListener接口,就应当重写actionPerformed(ActionEvent e);

f.在事件源中需要注册事件监听类,否则事件监听类接收不到事件源发生的事件


                                                线程

1.进程是指运行中的应用程序。

2.线程:

a.线程是轻量级的进程;

b.线程没有独立的地址空间(内存空间);

c.线程是由进程创建的(寄生在进程中);

d.一个进程可以拥有多个线程(多线程编程);

e.线程有几种状态:1.新建状态(new);2.就绪状态(Runnable);3.运行状态(Running);4.阻塞状态(Blocked);5.死亡状态(Dead)。

最后写一段代码,实现坦克的前后左右移动(通过W、A、S、D四个按键控制),如下图所示:


import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

public class MyTankGame extends JFrame

{

MyPanel mp;

public MyTankGame()

{

mp=new MyPanel();

this.add(mp);

this.setSize(400,300);

this.addKeyListener(mp); //注册监听

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

public static void main(String args[])

{

MyTankGame mtg=new MyTankGame();

}

}

class Tank

{

int x;

int y;

int direct;

public Tank(int x,int y)

{

this.x=x;

this.y=y;

}

public void setX(int x)

{

this.x=x;

}

public int getX()

{

return x;

}

public void setY(int y)

{

this.y=y;

}

public int getY()

{

return y;

}

}

class Hero extends Tank

{

public Hero(int x,int y)

{

super(x,y);

}

}

class MyPanel extends JPanel implements KeyListener

{

Hero hero;

public MyPanel()

{

hero=new Hero(200,200); //定义我的坦克的初始位置

}

public void paint(Graphics g)

{

super.paint(g);

g.fillRect(0,0,400,300); //设置背景颜色

this.drawTank(0,0,g,this.hero.direct);

}

public void drawTank(int x,int y,Graphics g,int direct)

{

g.setColor(Color.CYAN); //设置画笔颜色

//direct表示坦克方向,其中:0表示向上,1表示向左,2表示向下,3表示向右

if(this.hero.direct==0)

{

g.fill3DRect(hero.getX()-15,hero.getY()-15,5,30,false);

g.fill3DRect(hero.getX()-10,hero.getY()-10,20,20,false);

g.fill3DRect(hero.getX()+10,hero.getY()-15,5,30,false);

g.fillOval(hero.getX()-5,hero.getY()-5,10,10);

g.drawLine(hero.getX(),hero.getY(),hero.getX(),hero.getY()-15);

}

else if(this.hero.direct==1)

{

g.fill3DRect(hero.getX()-15,hero.getY()-15,30,5,false);

g.fill3DRect(hero.getX()-15,hero.getY()+10,30,5,false);

g.fill3DRect(hero.getX()-10,hero.getY()-10,20,20,false);

g.fillOval(hero.getX()-5,hero.getY()-5,10,10);

g.drawLine(hero.getX(),hero.getY(),hero.getX()-15,hero.getY());

}

else if(hero.direct==2)

{

g.fill3DRect(hero.getX()-15,hero.getY()-15,5,30,false);

g.fill3DRect(hero.getX()-10,hero.getY()-10,20,20,false);

g.fill3DRect(hero.getX()+10,hero.getY()-15,5,30,false);

g.fillOval(hero.getX()-5,hero.getY()-5,10,10);

g.drawLine(hero.getX(),hero.getY(),hero.getX(),hero.getY()+15);

}

else if(hero.direct==3)

{

g.fill3DRect(hero.getX()-15,hero.getY()-15,30,5,false);

g.fill3DRect(hero.getX()-15,hero.getY()+10,30,5,false);

g.fill3DRect(hero.getX()-10,hero.getY()-10,20,20,false);

g.fillOval(hero.getX()-5,hero.getY()-5,10,10);

g.drawLine(hero.getX(),hero.getY(),hero.getX()+15,hero.getY());

}

}

public void KeyTyped(KeyEvent e)

{}

public void KeyReleased(KeyEvent e)

{}

public void KeyPressed(KeyEvent e)

{

if(e.getKeyCode()==KeyEvent.VK_W)

{

this.hero.direct=0;

this.hero.y--;

}

else if(e.getKeyCode()==KeyEvent.VK_A)

{

this.hero.direct=1;

this.hero.x--;

}

else if(e.getKeyCode()==KeyEvent.VK_S)

{

this.hero.direct=2;

this.hero.y++;

}

else if(e.getKeyCode()==KeyEvent.VK_D)

{

this.hero.direct=3;

this.hero.x++;

}

this.repaint(); //最后一定要记得调用repaint函数,否则坦克无法动弹

}

}

大功告成,虽然在MyEclipse写过一遍了,重新再打一遍发现问题还是有好多,对照着源代码检查了一遍,重新放入运行发现还是一大片错误,所以说还是要多手写一些代码,在MyEclipse上快捷键按多了会让人依赖的,又快两点了,碎觉碎觉zzZ

相关文章

  • 日志8.27:监听机制

    今天复习了一下监听的内容,然后自己尝试写了写代码,总算勉强能把坦克大战的初步版代码写出来了,估计再过几天就能编出这...

  • rsyslog学习小记

    Linux日志机制的核心是rsyslog守护进程,该服务负责监听Linux下的日志信息,并把日志信息追加到对应的日...

  • 8.27 日志

    收到的兰姐和波哥准备的礼物,好开心。 兰姐切的哈密瓜,开心

  • 深入理解 Spring 的事件发布监听机制

    1. 什么是事件监听机制 在讲解事件监听机制前,我们先回顾下设计模式中的观察者模式,因为事件监听机制可以说是在典型...

  • RF的监听机制

    一、为了在命令行界面里能输出详细的日志,而不是去html里查看(方便调试),运用RF的监听机制,创建MyRobot...

  • 细谈Spring的事件监听机制

    一、事件监听的基本原理 事件监听机制和发布订阅机制是很相似的:发布了一个事件后,监听该类型事件的所有监听器会触发相...

  • 感恩日志8.27

    1、感恩我的老公,今天一早就给我们熬好八宝粥了,谢谢!谢谢!谢谢! 2、感恩我的洗面奶,让我每天都可以把脸洗的很干...

  • SpringBoot--监听器解析

    监听器模式 监听器模式有要素 事件 监听器 广播器 触发机制 系统监听器 监听器 ApplicationListe...

  • JavaFX中监听console.log输出的日志

    在日志输出前覆盖监听函数即可,该方法可以监听所有webview输出的信息:

  • Zookeeper监听机制杂记

    概述-监听机制背景 zookeeper中的事件监听和通知机制,分布式系统中各个节点,可协调资源抢占,可了解整个集群...

网友评论

      本文标题:日志8.27:监听机制

      本文链接:https://www.haomeiwen.com/subject/otihcttx.html