详谈Java中的事件监听机制
鼠标事件监听机制的三个方面:
1.事件源对象:
事件源对象就是能够产生动作的对象。在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象。Java中根据事件的动作来区分不同的事件源对象,动作发生在哪个组件上,那么该组件就是事件源对象
2.事件监听方法:
addMouseListener(MouseListenerml);该方法主要用来捕获鼠标的释放,按下,点击,进入和离开的动作;捕获到相应的动作后,交由事件处理类(实现MouseListener接口)进行处理。
addActionListener(ActionListeneral);捕获类似按钮组件上的鼠标点击动作或者是类似输入框组件上的键盘回车动作;然后将动作以及相关信息交由事件处理类(实现ActionListener接口)的相应方法进行处理。
addMouseMotionListener(MouseMotionListenermml);捕获鼠标的移动和拖动动作;然后将动作以及相关信息交由事件处理类(实现MouseMotionListener接口)的相应方法进行处理。
addKeyListener(KeyListenerkl);捕获事件源对象上的键盘按键的按下、释放和敲击动作;然后将动作以及相关信息交由事件处理类(实现KeyListener接口)的相应方法进行处理。
3.事件接口(事件处理类,也即实现了事件接口的类):
MouseListener鼠标事件接口,有按下,释放,点击,进入和离开的事件处理方法
ActionListener动作事件接口,有动作对应的事件处理方法
MouseMotionListener 鼠标移动事件接口,有移动和拖动的事件处理方法
KeyLisetener 键盘事件接口,有释放,按下和敲击的事件处理方法
了解了事件监听的这三个方面之后,我们要对组件添加事件的监听就很容易了。下面是一个小例子:
目标:创建一个简易的绘图板,可以实现按下相应的功能来达到不同的绘画目的。
分析:
1.首选需要一个画图板的简易界面,定义一个Draw类使用Java的Swing组件进行界面的初始化。
2.然后定义事件接口DrawListener类,让它实现以上的接口,重写接口中的方法,达到自己的目的。
3.在Draw中实例化DrawListener类的对象。
4.为Draw类中的组件添加事件监听方法,指定事件处理类为DrawListener。
代码实现:
Draw类
packagecom.cbs;
importjava.awt.Color;
importjava.awt.Dimension;
importjava.awt.FlowLayout;
importjava.awt.Graphics;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
/**
*Draw类,用于界面的初始化
*
*@authorCBS
*
*/
publicclassDraw{
publicstaticvoidmain(String[]args){
Drawt=newDraw();
t.showUI();
}
//界面初始化方法
publicvoidshowUI(){
JFramejf=newJFrame();
jf.setTitle("画图");
jf.setSize(700,700);
jf.setDefaultCloseOperation(3);
jf.setLocationRelativeTo(null);
FlowLayoutlayout=newFlowLayout(FlowLayout.LEFT);
jf.setLayout(layout);
JButtondrawLine=newJButton("画直线");
jf.add(drawLine);
JButtondrawOval=newJButton("画椭圆");
jf.add(drawOval);
JButtondrawArc=newJButton("画曲线");
jf.add(drawArc);
JButtondrawPolygon=newJButton("三角形");
jf.add(drawPolygon);
JButtonjb1=newJButton();
jb1.setBackground(Color.RED);
jf.add(jb1);
jb1.setPreferredSize(newDimension(30,30));
JButtonjb2=newJButton();
jb2.setBackground(Color.GREEN);
jf.add(jb2);
jb2.setPreferredSize(newDimension(30,30));
jf.setVisible(true);
Graphicsg=jf.getGraphics();//获取当前的画笔
DrawListenerdl=newDrawListener(g);//实例化DrawListener类的对象
jf.addMouseListener(dl);//为窗体添加鼠标事件监听方法
jf.addMouseMotionListener(dl);//为窗体添加鼠标移动事件监听方法
//为按钮添加动作监听
drawLine.addActionListener(dl);
drawOval.addActionListener(dl);
jb1.addActionListener(dl);
jb2.addActionListener(dl);
drawArc.addActionListener(dl);
drawPolygon.addActionListener(dl);
}
}
DrawListener类
packagecom.cbs;
importjava.awt.Color;
importjava.awt.Graphics;
importjava.awt.Image;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseListener;
importjava.awt.event.MouseMotionListener;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
/**
*事件处理类
*
*@authorCBS
*
*/
publicclassDrawListenerimplementsMouseListener,MouseMotionListener,
ActionListener{
privateintx1,y1,x2,y2;//记录两次鼠标的点击坐标
privateGraphicsg;//从界面获取画布对象
privateStringstr;//记录当前按钮的信息,区分不同的按钮
privateColorcolor;//记录画笔的颜色信息
privateintf=1;//控制变量,用于更新坐标
publicDrawListener(Graphicsg){
this.g=g;
}
//鼠标按下时的处理方法
publicvoidmousePressed(MouseEvente){
//记录第一次点击的位置;由对象e得到
if(f==1){
x1=e.getX();
y1=e.getY();
}
}
//鼠标点击时的处理方法
publicvoidmouseClicked(MouseEvente){
if("三角形".equals(str)){
System.out.println("sanjaioxing");
intx,y;
x=e.getX();
y=e.getY();
g.setColor(color);
g.drawLine(x,y,x1,y1);
g.drawLine(x2,y2,x,y);
f=1;
}
}
//鼠标释放时的处理方法
publicvoidmouseReleased(MouseEvente){
//记录鼠标释放时的坐标
if(f==1){
x2=e.getX();
y2=e.getY();
}
//两个坐标的得到了,可以用于直线的绘制,调用画布对象g方法,在界面上面画出直线
if("画直线".equals(str)){
g.setColor(color);
g.drawLine(x1,y1,x2,y2);
}
if("画椭圆".equals(str)){
g.setColor(color);
g.drawOval(x1,y1,x2,y2);
}
if("三角形".equals(str)&&f==1){
g.setColor(color);
g.drawLine(x1,y1,x2,y2);
f++;
}
}
//鼠标进入时的处理方法
publicvoidmouseEntered(MouseEvente){
}
//鼠标退出时的处理方法
publicvoidmouseExited(MouseEvente){
}
publicvoidactionPerformed(ActionEvente){
if("".equals(e.getActionCommand())){
JButtonjb=(JButton)e.getSource();
color=jb.getBackground();
}else{
str=e.getActionCommand();
}
}
//鼠标拖动时的处理方法
publicvoidmouseDragged(MouseEvente){
if("画曲线".equals(str)){
intx,y;
x=e.getX();
y=e.getY();
g.setColor(color);
g.drawLine(x1,y1,x,y);
x1=x;
y1=y;
}
}
//鼠标释放时的移动方法
publicvoidmouseMoved(MouseEvente){
}
}
以上这篇详谈Java中的事件监听机制就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。