在一个组件上想分别处理双击、单击事件,可java好像没有处理双击的接口,按jdk的说法是通过getClickCount()得到鼠标击键数来区分,可我试了不行,都是作为单击处理的
  在FAQ里搜到一个类似的问题,说是系统鼠标双击速度要调快些,可我调到最快,也没有用。
  实在没办法了,求知道如何解决的高手援手,谢谢!!

解决方案 »

  1.   

    顶啊!!!
    高手快来啊
    想了一个办法,捕到一个单击时,进行延时,看看后面有没有一个getClickCount()==2的事件,没有进行单击事件,有就双击事件,可这个延时为多长为好。显然这不是一个好办法,求高手快露面啊
    大家有什么好办法,在下面回帖啊。回帖者都有分,分不够我还可以加的。谢谢了!!
      

  2.   

    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!");
        }
      }
    }
      

  3.   

    谢谢lip009(深蓝忧郁)这样虽然可以捕捉到双击事件,但是在丢弃单击事件的前提下可行。如果我想在一个组件上分别处理单击事件与双击事件,上面就得加一个getClickCount()==1
    这时,您再看就会发现,一个双击事件总是会先被getClickCount()==1分支捕获,然后才是getClickCount()==2这样一来一次双击会同时引发两个事件,达不到要求了。
    也就是在您代码情况上,加一个if ( e.getClickCount() == 1 ) System.out.println("Single Click");
    则一次双击则会打印出:
    Single Click
    Double Click在区分单击与双击时,不处理让组件失去焦点的情况还好一点。但,如果让单击处理弹出一个对话框的话,双击事件就永远都不会发生了!!!
    伤脑筋
      

  4.   

    单双击事件均已实现,互不影响:public class MyMouseListener
        extends java.awt.event.MouseAdapter {
      private static boolean flag=false;
      private static int clickNum=0;  public void mouseClicked(MouseEvent e) {
        this.flag=false;
        if (this.clickNum == 1) {
          this.clickNum=0;
          this.flag=true;
          System.out.println("Doublc Clicked!");
          return;
        }    java.util.Timer timer=new java.util.Timer();    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) {
              System.out.println("Single Clicked!");
              MyMouseListener.flag = true;
              MyMouseListener.clickNum=0;
              n=0;
              this.cancel();
              return;
            }
            clickNum++;
            n++;
          }
        },new java.util.Date(),200);
      }
    }
      

  5.   

    太感谢lip009(深蓝忧郁)了,自己还在查找怎么达到延时,想不到已经给出答案了,呵呵
    现在就结贴