JAVA入门到精通-第35讲-事件处理-坦克大战3

画出弧形:

g.drawArc:

前两个参数:代表中心点,后面代表宽,高,后面是弧度的大小;



 50代表弧度,后面方向;



 

 SWING编程三个部分:

(1)组件和布局管理器;

(2)绘图技术;

(3)事件处理机制;



 鼠标,键盘按下的某个按钮或者移动等都是事件;

JAVA认为,消息是一种事件对象;事件监听者也是一个类;

事件监听者中有函数或者方法专门去处理事件;

import  java.awt.Event.*;

需要对事件进行处理,把Event包带进去;

 Border布局中间是 默认的;

点击按钮做相应的 反映:

事件源:jb1/jb2

事件监听者:Demo9_3这个类监听



 事件处理方法:actionPerformed(ActionEvent e)

如何监听?注册监听:

事件源在前提供一个方法,addActionListener

在事件源的身上添加一个监听方法



 

//区分事件的处理方法

setActionCommand("黑色");

如果jb1被点击了,“黑色”的值会被传出去

ActionEvent e  事件对象



 


 如何拿到颜色值呢?



 一旦一个类在这个事件上监听了,

这个事件就会自动传递给他;



 这个动作也可以被多个事件监听者进行监听;

可以被Cat监听:



 

 

 一个普通的类也可以被监听;

一个事件源被多个类监听;



 

 this的具体实例:demo9_3,构造函数的实例;



 demo9_3是事件监听者;



 事件处理方法:actionPerformed

事件对象:ActionEvent  arg0



 通过键盘进行事件监听:



需要实现接口implements,这样mp才有监听的能力;



 给MyPanel添加方法;双击会出现三个函数:

 KeyPressed -键被按下 

 KeyReleased-键被释放

 KeyTyped-键的值被输出



 

 (char)e.getKeyCode( );



 VK_DOWNN向下的键

圆要动起来,需要重绘刷新,调用repaint()函数;

this.repaint( );



 

 上下左右了:

可以跑起来了;

变快的话,步长快速改变就行

y+=10;

---------------------------------------------------------------------

java事件处理机制

如何通过键盘或鼠标的控制使Java程序中的功能有响应?

java事件处理机制--初步介绍

java事件处理是采取“委派事件模型”。所谓“委派事件模型”是指当事件发生时,产生事件的对象(即事件源),会把此“信息”传递给“事件的监听者”处理的一种方式,而这里所说的“信息”实际上就是java.awt.event事件类库里某个类所创建的对象,我们暂时把它称为“事件的对象”。

比如:当按下按钮时,就会在按钮触发一个“事件”,程序就会产生一个“事件对象”来表示这个事件,并把这个“事件对象”传递给“事件的监听者”,“事件的监听者”再根据“事件对象”的类型进行相应处理。

为了让“产生事件的对象”[比如按钮]知道要把事件传递给哪一个“事件监听者”,我们必需先把“事件监听者”在“产生事件的对象”注册,这个操作也就是要告知“产生事件的对象”要把事件传递给它。

实例[Window016.java]
/**
* 功能:事件处理机制
*/
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Window016 extends JFrame implements ActionListener{
//定义组件
JPanel mp=null;
JButton jb1,jb2;
public static void main(String[] args) {
Window016 win=new Window016();
}
//构造函数
public Window016(){
//创建组件
mp=new JPanel();
jb1=new JButton("黑色");
jb2=new JButton("红色");
//设定布局管理器

//加入组件
mp.setBackground(Color.black);
this.add(mp);
this.add(jb1,BorderLayout.NORTH);
this.add(jb2,BorderLayout.SOUTH);

//猫类在监听
Cat mycat1=new Cat();
jb1.addActionListener(mycat1);
jb2.addActionListener(mycat1);
//注册监听
jb1.addActionListener(this);
jb2.addActionListener(this);

//指定action命令
jb1.setActionCommand("黑色");
jb2.setActionCommand("红色");

//JFrame窗体设置
this.setTitle("事件处理机制");
this.setSize(400, 300);
this.setLocationRelativeTo(null);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

//对事件处理的方法
public void actionPerformed(ActionEvent e) {
//判断是哪个按钮被点击
if(e.getActionCommand().equals("黑色")){
System.out.println("点击了黑色按钮");
mp.setBackground(Color.BLACK);
}else if(e.getActionCommand().equals("红色")){
System.out.println("点击了红色按钮");
mp.setBackground(Color.RED);
}else{
System.out.println("不知道");
}
}
}

class Cat implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
if(arg0.getActionCommand().equals("黑色")){
System.out.println("Cat也知道你按下了黑色按钮");
}else if(arg0.getActionCommand().equals("红色")){
System.out.println("Cat也知道你按下了红色按钮");
}else {
System.out.println("Cat也不知道");
}
}
}

x

1

实例[Window016.java]

2

/**

3

* 功能:事件处理机制

4

*/

5

import java.awt.*;

6

import javax.swing.*;

7

import java.awt.event.*;

8

public class Window016 extends JFrame implements ActionListener{

9

    //定义组件

10

    JPanel mp=null;

11

    JButton jb1,jb2;

12

    public static void main(String[] args) {

13

        Window016 win=new Window016();

14

    }

15

    //构造函数

16

    public Window016(){

17

        //创建组件

18

        mp=new JPanel();

19

        jb1=new JButton("黑色");

20

        jb2=new JButton("红色");

21

        //设定布局管理器

22

        

23

        //加入组件

24

        mp.setBackground(Color.black);

25

        this.add(mp);

26

        this.add(jb1,BorderLayout.NORTH);

27

        this.add(jb2,BorderLayout.SOUTH);

28

        

29

        //猫类在监听

30

        Cat mycat1=new Cat();

31

        jb1.addActionListener(mycat1);

32

        jb2.addActionListener(mycat1);

33

        //注册监听

34

        jb1.addActionListener(this);

35

        jb2.addActionListener(this);

36

        

37

        //指定action命令

38

        jb1.setActionCommand("黑色");

39

        jb2.setActionCommand("红色");

40

        

41

        //JFrame窗体设置

42

        this.setTitle("事件处理机制");

43

        this.setSize(400, 300);

44

        this.setLocationRelativeTo(null);

45

        this.setVisible(true);

46

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

47

    }

48


49

    //对事件处理的方法

50

    public void actionPerformed(ActionEvent e) {

51

        //判断是哪个按钮被点击

52

        if(e.getActionCommand().equals("黑色")){

53

            System.out.println("点击了黑色按钮");

54

            mp.setBackground(Color.BLACK);

55

        }else if(e.getActionCommand().equals("红色")){

56

            System.out.println("点击了红色按钮");

57

            mp.setBackground(Color.RED);

58

        }else{

59

            System.out.println("不知道");

60

        }

61

    }

62

}

63


64

class Cat implements ActionListener{

65

    public void actionPerformed(ActionEvent arg0) {

66

        if(arg0.getActionCommand().equals("黑色")){

67

            System.out.println("Cat也知道你按下了黑色按钮");

68

        }else if(arg0.getActionCommand().equals("红色")){

69

            System.out.println("Cat也知道你按下了红色按钮");

70

        }else {

71

            System.out.println("Cat也不知道");

72

        }

73

    }

74

}



 

 

 

------------------------------------------------------------------------------

实例[Window017.java]
/**
* 功能:加深对事件处理机制的理解
* 1、通过上下左右键,来控制一个小球的移动。
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Window017 extends JFrame {
//设定组件
MyPanels mp=null;
public static void main(String[] args) {
Window017 win=new Window017();
}
//构造函数
public Window017(){
//构建组件
mp=new MyPanels();

//监听
this.addKeyListener(mp);

//加入组件
this.add(mp);
//设置窗体
this.setTitle("键盘事件监听");
this.setSize(400, 300);
this.setLocationRelativeTo(null);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
//定义自己的面板
class MyPanels extends JPanel implements KeyListener{
int x=10,y=10;
public void paint(Graphics g){
super.paint(g);
g.fillOval(x, y, 10, 10);
}

public void keyPressed(KeyEvent e) {//keyPressed代表键被按下
System.out.println("被按下"+((char)e.getKeyCode()));
if(e.getKeyCode()==KeyEvent.VK_DOWN){
System.out.println("向下");
y++;
}else if(e.getKeyCode()==KeyEvent.VK_UP){
System.out.println("向上");
y--;
}else if(e.getKeyCode()==KeyEvent.VK_LEFT){
System.out.println("向左");
x--;
}else if(e.getKeyCode()==KeyEvent.VK_RIGHT){
System.out.println("向右");
x++;
}

//调用repaint()函数,来重绘界面
this.repaint();
}

public void keyReleased(KeyEvent e) {//keyReleased代表键被弹起

}

public void keyTyped(KeyEvent e) {//keyTyped代表具体的值被输出

}

1

实例[Window017.java]

2

/**

3

* 功能:加深对事件处理机制的理解

4

* 1、通过上下左右键,来控制一个小球的移动。

5

*/

6

import java.awt.*;

7

import java.awt.event.*;

8

import javax.swing.*;

9

public class Window017 extends JFrame {

10

    //设定组件

11

    MyPanels mp=null;

12

    public static void main(String[] args) {

13

        Window017 win=new Window017();

14

    }

15

    //构造函数

16

    public Window017(){

17

        //构建组件

18

        mp=new MyPanels();

19

        

20

        //监听

21

        this.addKeyListener(mp);

22

                

23

        //加入组件

24

        this.add(mp);

25

        //设置窗体

26

        this.setTitle("键盘事件监听");

27

        this.setSize(400, 300);

28

        this.setLocationRelativeTo(null);

29

        this.setVisible(true);

30

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

31

    }

32

}

33

//定义自己的面板

34

class MyPanels extends JPanel implements KeyListener{

35

    int x=10,y=10;

36

    public void paint(Graphics g){

37

        super.paint(g);

38

        g.fillOval(x, y, 10, 10);

39

    }

40


41

    public void keyPressed(KeyEvent e) {//keyPressed代表键被按下

42

        System.out.println("被按下"+((char)e.getKeyCode()));

43

        if(e.getKeyCode()==KeyEvent.VK_DOWN){

44

            System.out.println("向下");

45

            y++;

46

        }else if(e.getKeyCode()==KeyEvent.VK_UP){

47

            System.out.println("向上");

48

            y--;

49

        }else if(e.getKeyCode()==KeyEvent.VK_LEFT){

50

            System.out.println("向左");

51

            x--;

52

        }else if(e.getKeyCode()==KeyEvent.VK_RIGHT){

53

            System.out.println("向右");

54

            x++;

55

        }

56

        

57

        //调用repaint()函数,来重绘界面

58

        this.repaint();

59

    }

60


61

    public void keyReleased(KeyEvent e) {//keyReleased代表键被弹起

62

        

63

    }

64

    

65

    public void keyTyped(KeyEvent e) {//keyTyped代表具体的值被输出

66

        

67

    }

来自为知笔记(Wiz)

原文地址:https://www.cnblogs.com/xuxaut-558/p/10045724.html

时间: 2024-11-09 00:34:16

JAVA入门到精通-第35讲-事件处理-坦克大战3的相关文章

JAVA入门到精通-第38讲-线程-坦克大战6

 应用程序在内存中开辟空间-进程: 内存-大脑容量:  反应切换的速度-CPU: 试图去尝试别的进程的地址空间---病毒: 线程是由进程(应用程序)创建的: 涉及到并发,就会涉及到线程:迅雷下载:      线程不会跑出到进程外面去的: 地址空间是由操作系统和JVM决定的: 32/64位,CPU的寻址空间范围,加载内存的大小:  线程的调度:  CPU.内存资源OK?--->Running,运行状态: 运行过程CPU,内存不够---->Blocked,阻塞状态: 资源空闲,可用-------&

JAVA入门到精通-第94讲-山寨QQ项目8-好友在线提示

遇到的问题: 现在每登录一个人,后面的人是能看到前面的登录的人的: 但是,前面的人看不到后面的人登录: //后面每登录一个人,有责任去通知前面登录的人他已经上线了: 通知了完以后,需要更改好友在线的情况: //不让同一个账号反复登录 //如果 好友不在线,则不能聊天 ================================ [ManageQqChat.java] /** * 这是一个管理用户聊天界面的类 */ package com.qq.client.tools; import jav

JAVA入门到精通-第33讲-绘图技术.坦克大战1

    用的是Access数据库,安全性不够好,性能也不够强大:   躲在这里,坦克很少过来,做了一个随机数: 把得分的记录保存在数据库里面: SQLServer2005中型数据库:    (x,y)坐标:     800x600:     表示计算机屏幕上的每一行由800个点组成,共有600行:   共有480000个像素:   java绘图技术:   绘图一般在JPane上画: 覆盖JPanel的paintat方法 Graphics是一个图形画笔类,绘图的重要类,可以理解为一只画笔 supe

JAVA入门到精通-第36讲-事件监听-坦克大战4

Java事件处理机制:  事件源:事件:事件监听者:事件处理方法:  任何一个类,只要实现了相应的接口,就可以去监听某个事件源: 一个类要实现监听的基本步骤:  a.实现相应的接口[KeyListener,MouseListener,ActionListener,WindowListener] b.把接口的处理方法根据需要重新编写(override) c.在事件源注册监听 d.事件传递是靠事件对象 通过ActionEvent传递事件: 通过事件进行委派事件模型进行事件处理:  一个事件源可能会生

JAVA入门到精通-第31讲-常见组件

面板组件-Jpanel  一个JFrame,多个JPanel: JPanel默认是流布局:FlowLayout:  通过JPanel达到复杂布局的目的:  可以认为是网格布局,有3个JPanel:2个Label:2个按钮: 一个密码框和一个文本输入框:   最终展现出来的还是靠JFrame展现的  网格布局好点,3个JPanel,用流布局,控件往里加: ButtonGroup按钮组:一组里面只能选择一个:    对单选框管理,就是把它加入到ButtonGroup里面: 单选框也是一个个放进JPa

JAVA入门到精通-第45讲-IO编程

image1=ImageIO.read(new File("bomb_1.gif")); 图片拷贝: 输入流和输出流同时要用的问题: 图片读入到内存: 写入,输出到某个文件: 二进制文件,字节流完成: FileInputStream fis=new FileInputStream("xxxx.jpg"); 输出到指定文件:FileOutputStream  fos=null; 关闭打开的文件流: -----------------------------------

JAVA入门到精通-第72讲-学生管理系统4-model 2模式(1)

删除.查询.添加.修改: -修改: 每个字段都可能修改: //给?赋值 //在prepareStatement语句后面赋值才好用 //修改完了,更新数据 目前为止,已经完成了增删改查-Model1模式 最大特点: 界面和业务逻辑操作是放在一起的: 优点:简单,开发方便: 缺点:代码复用性不高: 中大型项目可读性差,可维护性不高: 前台后端混杂在一起的: 比如:"数据库密码换了, 所有涉及到数据库的地方都需要发生变化" =================================

JAVA入门到精通-第32讲-swing编程实战

 JBorderLayout,左边是JList,拆分窗格: 图片是放在JLabel上的,图片的地址写好就行:  在相关项目下面建立一个文件夹Folder,放置图片:或者复制粘贴:   拆分:水平拆分?垂直拆分?    拆分之后把jList和jl1这两个组件放进去: 可以伸缩:  在窗口左上角出现自己的图标? Border布局: 多行文本框带滚动条,聊天窗口可滚动:   加入QQ左上角图标:      转成图片,getImage; Border布局很有用, CENTER会被自动挤满:  QQ号码.

JAVA入门到精通-第44讲-IO编程

//FileOutputStream的使用 准备把它输出到d:\\ss.txt 文件, 文件不存在直接创建: 如果存在,可能会被覆盖: //字节流 FileOutputStream fos=null; //输出-Output-离开内存-Output/Write //如何把string转换成bytes数组: s.getBytes() //关闭文件流 //两个字符串的换行 world\r\n \r\n就是回车换行的意思 ----------------------------------------