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事件类库里某个类所创建的对象,我们暂时把它称为“事件的对象”。

比如:当按下按钮时,就会在按钮触发一个“事件”,程序就会产生一个“事件对象”来表示这个事件,并把这个“事件对象”传递给“事件的监听者”,“事件的监听者”再根据“事件对象”的类型进行相应处理。
为了让“产生事件的对象”[比如按钮]知道要把事件传递给哪一个“事件监听者”,我们必需先把“事件监听者”在“产生事件的对象”注册,这个操作也就是要告知“产生事件的对象”要把事件传递给它。

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
}------------------------------------------------------------------------------
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
}




浙公网安备 33010602011771号