JAVA中的鼠標雙擊事件

    鼠標的單雙擊事件在很多時候對我們幫助很大,但是在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(),200);
  }


  
/**
   * 鼠標單擊事件
   * 
@param e 事件源參數
   
*/

  
public void mouseSingleClicked(MouseEvent e){
    System.out.println(
"Single Clicked!");
  }


  
/**
   * 鼠標雙擊事件
   * 
@param e 事件源參數
   
*/

  
public void mouseDoubleClicked(MouseEvent e){
    System.out.println(
"Doublc Clicked!");
  }

}

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章