移动适配代码java java适配模式( 四 )


System.out.println("\n双击鼠标");
int x = evt.getX(); int y = evt.getY();
System.out.println("点击鼠标的位置\nX:" + x + "\ty: " + y);
}
});
addMouseMotionListener(this);
}
publicvoid mouseMoved(MouseEvent evt){
System.out.println("\n鼠标正在移动");
}
publicvoid mouseDragged(MouseEvent evt){
System.out.println("\n鼠标正在拖动");
}
}
class MyFrame extends JFrame{
public MyFrame(){
setTitle("鼠标事件示例程序");
setSize(300, 200);
addWindowListener(new WindowAdapter(){
publicvoid windowClosing(WindowEvent e){
System.exit(0);
}
} );
Container contentPane = getContentPane();
contentPane.add(new MyPanel());
}
}
publicclass MouseEvt{
publicstaticvoid main(String[] args){
JFrame frame = new MyFrame();
frame.setVisible(true);
}
}
///
简要说明
在MyPanel的构建器中添加了鼠标适配器来监听鼠标点击数和位置 。也添加了运动监听器来处理移动和拖放操作 。
鼠标双击事件
鼠标的单双击事件在很多时候对我们帮助很大,但是在JAVA中却没有给出鼠标双击事件.我们可以通过事件源e.getClickCount()==2来判断鼠标点击次数来实现鼠标双击事件,例如: public class MyMouseListener
extends java.awt.event.MouseAdapter ...{
public void mouseClicked(MouseEvent e) ...{
System.out.println("clicked");
int clickTimes = e.getClickCount();
if (clickTimes == 2) ...{
System.out.println("Doublc Clicked!");
}
}
}
但是这样并没有达到我们的要求,因为在每次触发双击事件的同时会触发单击事件.所以我们试图改进以上方案,不使用系统提供的e.getClickCount()方法.可以考虑当第一次单击鼠标的时候让鼠标单击事件延时0.2秒执行,而在这段时间里等待第二次单击,如果有第二次单击,那么我们执行双击事件任务,取消单击任务;如果在这段时间没有等到再次单击,那么执行单击任务.
下面是用定时器延时单击事件实现鼠标双击事件,单击和双击事件互不影响!
public class MyMouseListener
extends java.awt.event.MouseAdapter ...{
private static boolean flag=false;//用来判断是否已经执行双击事件
private static int clickNum=0;//用来判断是否该执行双击事件
public void mouseClicked(MouseEvent e) ...{
final MouseEvent me=e;//事件源
this.flag=false;//每次点击鼠标初始化双击事件执行标志为false
if (this.clickNum == 1) ...{//当clickNum==1时执行双击事件
this.mouseDoubleClicked(me);//执行双击事件
this.clickNum=0;//初始化双击事件执行标志为0
this.flag=true;//双击事件已执行,事件标志为true
return;
}
//定义定时器
java.util.Timer timer=new java.util.Timer();
//定时器开始执行,延时0.2秒后确定是否执行单击事件
timer.schedule(new java.util.TimerTask() ...{
private int n=0;//记录定时器执行次数
public void run() ...{
if(MyMouseListener.flag)...{//如果双击事件已经执行,那么直接取消单击执行
n=0;
MyMouseListener.clickNum=0;
this.cancel();
return;
}
if (n == 1) ...{//定时器等待0.2秒后,双击事件仍未发生,执行单击事件
mouseSingleClicked(me);//执行单击事件
MyMouseListener.flag = true;
MyMouseListener.clickNum=0;
n=0;
this.cancel();
return;
}
clickNum++;
n++;
}
},new java.util.Date(),500);
}
/** *//**
* 鼠标单击事件
* @param e 事件源参数
*/
public void mouseSingleClicked(MouseEvent e)...{
System.out.println("Single Clicked!");
}
/** *//**

推荐阅读