[img][/img]<div class="iteye-blog-content-contain" style="font-size: 14px"></div>
?
?
?
?
一.事件机制的组成
2.事件监听方法
3.事件处理类
1.1.事件源:一系列的可以接受相应动作的组件
例如:按钮,标签,面板,画布等等。。。
Q; 那我是不是可以说任何可以看到的对象都可以作为事件源呢?
A: 答案是肯定的。everything is ok!
1.2事件监听器方法:用来接收(获取)相应动作的方法
例如:动作监听器方法(addActionListener(ActionListener al))
按钮,标签,...单击,输入框中的回车操作
鼠标监听器方法(addMouseListener(MouseListener ml))
事件源上触发鼠标的按下,松开,单击,进入,离开的操作
鼠标移动监听器方法(addMouseMotionListene (MouseMotionListener mm))
事件源上触发鼠标移动或者鼠标按下拖动操作
键盘监听器方法(addKeyListener(KeyListener kl))
在事件源上按下键盘操作时触发该方法
1.3事件处理类:用来处理获取监听后的一系列处理。
首先,自定义一个类实现也可以说继承事件接口,也可也继承类(但是此类应该是接口的子类),当然此类中必须实现相应的处理方法。
比如:我要监听一个按钮(事件源),判断按下后我要对一个画布进行处理,并把画布的对象传给事件处理类,此时我自定义的类可以继承接口(MouseListener)也可以继承MouseListener 的子类MouseAdapter
五子棋的监听部分代码
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JOptionPane;
public class FivechessListener extends MouseAdapter{
private Graphics g;
private boolean flag = false;
public FivechessListener(Graphics g) {
// TODO Auto-generated constructor stub
this.g = g;
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
int x = e.getX();
int y = e.getY();
//计算行列及余数,行列的余数大于2/3size,则列行加1
int X = (x - Digt.X) % Digt.size;
int column = (x - Digt.X) / Digt.size;
int Y = (y - Digt.Y) % Digt.size;
int row = (y - Digt.X) / Digt.size;
if(X> Digt.size/3*2){
column++;
}
if(Y> Digt.size/3*2){
row++;
}
//获取当前棋子的左上角坐标
int x1 = Digt.X + column*Digt.size - Digt.size/2;
int y1 = Digt.Y + row*Digt.size - Digt.size/2;
//黑白交替
if(Digt.array[row][column]==0){
if(flag == false){
g.setColor(Color.black);
g.fillOval(x1,y1,Digt.size,Digt.size);
flag = true;
Digt.array[row][column]=-1;
}
else{
g.setColor(Color.white);
g.fillOval(x1,y1,Digt.size,Digt.size);
flag = false;
Digt.array[row][column]=-1;
}
}
//判断输赢
if(Winchess.is_winorfalse(row,column)){
if(g.getColor()==Color.black){
JOptionPane.showMessageDialog(null, "黑棋胜利");
}else {
JOptionPane.showMessageDialog(null, "白棋胜利");
}
}
System.out.println("row = " + row + "\t column=" + column);
}
}
通过上面的比较抽象的描述如果你还是不太理解监听机制,我就用吃饭来类比一下喽!
首先,事件源我可以看做我们的肚子或者胃,当我们消耗卡路里后,我们一般都会有饥饿的感觉,而这种感觉会通过神经末梢(可以看成一种一种媒介)的传递会刺激我们的大脑,并促使我们的大脑发出命令,对我们的肢体进行控制,也就我饿了,到时间我们该吃饭了,然后我们就会屁颠屁颠的去食堂大吃一顿。
这里的监听方法可以看成是神经,然后大脑即使我们继承的父类,大脑里专门管饥饿的脑区就是我们的实体类(继承大脑这个接口),然后大脑会发出命令,我们行动起来这个过程就是我们实现的方法。相应的命令就是监听方法传过来的参数(对应的上面的代码即是画布对象)。