Java 在MouseRelease方法中检测双击

Java 在MouseRelease方法中检测双击,java,mouseevent,Java,Mouseevent,我需要使用mouseReleased方法而不是mouseClicked,所以我需要找到一种拦截双击的方法。代码如下: public void mouseReleased(MouseEvent e) { if (e.getClickCount() == 2) System.out.println ("Double CLICK mouseReleased"); else { row= clientTable.rowAtPoint(e.g

我需要使用mouseReleased方法而不是mouseClicked,所以我需要找到一种拦截双击的方法。代码如下:

public void mouseReleased(MouseEvent e)
{
    if (e.getClickCount() == 2)
        System.out.println ("Double CLICK mouseReleased");
    else
    {    
        row= clientTable.rowAtPoint(e.getPoint());
        col= clientTable.columnAtPoint(e.getPoint());

        clientTable.sel(row, col);
    }
}

问题是,当我双击时,我还有一个单击事件。有人知道怎么解决这个问题吗?谢谢

1。使用类的方法
getClickCount()
方法
MouseEvent

2.这将帮助您获取单击的类型。。单人、双人、三人等

有关更多详细信息,请参见此处:


1.使用类的方法
MouseEvent

2.这将帮助您获取单击的类型。。单人、双人、三人等

有关更多详细信息,请参见此处:


双击时,没有一个简单的方法可以不单击

我曾经写过这篇文章,但它有一个缺点,你的点击会变得有点迟钝

用法示例:

    JLabel label = new JLabel("test");
    label.addMouseListener(new SingleClickInhibitorMouseListener(some other mouselistener));


public class SingleClickInhibitorMouseListener implements MouseListener
{
  public static final Integer CLICK_TRESHOLD = (Integer) Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");

  private Collection<MouseListener> mouseListeners = new ArrayList<MouseListener>();

  public SingleClickInhibitorMouseListener( MouseListener listener )
  {
    mouseListeners.add(listener);
  }

  public void addMouseListener( MouseListener listener )
  {
    mouseListeners.add(listener);
  }

  public void removeMouseListener( MouseListener listener )
  {
    mouseListeners.remove(listener);
  }

  public void removeAllListeners()
  {
    mouseListeners.clear();
  }

  public void mouseSingleClick( MouseEvent e )
  {
    for (MouseListener mouseListener : mouseListeners)
      {
      mouseListener.mouseClicked(e);
      }
  }

  public void mouseDoubleClick( MouseEvent e )
  {
    for (MouseListener mouseListener : mouseListeners)
      {
      mouseListener.mouseClicked(e);
      }
  }

  public boolean hasDoubleClick = false;

  public void mouseClicked( final MouseEvent me )
  {
    if ( me.getClickCount() == 1 )
      {
      new Thread(new Runnable()
      {
        public void run()
        {
          try
            {
            Thread.sleep(CLICK_TRESHOLD);
            SwingUtilities.invokeLater(new Runnable()
            {
              public void run()
              {
                if ( hasDoubleClick )
                  hasDoubleClick = false;
                else
                  mouseSingleClick(me);
              }
            });
            }
          catch (InterruptedException e)
            {
            mouseSingleClick(me);
            hasDoubleClick = false;
            }
        }
      }).start();
      }
    else
      {
      if ( me.getClickCount() == 2 )
        hasDoubleClick = true;
      mouseDoubleClick(me);
      }
  }

  public void mousePressed( MouseEvent e )
  {
    for (MouseListener mouseListener : mouseListeners)
      {
      mouseListener.mousePressed(e);
      }
  }

  public void mouseReleased( MouseEvent e )
  {
    for (MouseListener mouseListener : mouseListeners)
      {
      mouseListener.mouseReleased(e);
      }
  }

  public void mouseEntered( MouseEvent e )
  {
    for (MouseListener mouseListener : mouseListeners)
      {
      mouseListener.mouseEntered(e);
      }
  }

  public void mouseExited( MouseEvent e )
  {
    for (MouseListener mouseListener : mouseListeners)
      {
      mouseListener.mouseExited(e);
      }
  }
}
JLabel标签=新的JLabel(“测试”);
label.addMouseStener(新的SingleClickInhibitorMouseStener(其他一些MouseStener));
公共类SingleClickInhibitorMouseListener实现MouseListener
{
public static final Integer CLICK_TRESHOLD=(Integer)Toolkit.getDefaultToolkit().getDesktopProperty(“awt.multiClickInterval”);
private Collection mouseListeners=new ArrayList();
公共单键单击抑制器MouseStener(MouseStener侦听器)
{
添加(侦听器);
}
public void addMouseStener(MouseStener侦听器)
{
添加(侦听器);
}
public void removeMouseListener(MouseListener侦听器)
{
鼠标侦听器。删除(侦听器);
}
public void removeAllListeners()
{
mouseListeners.clear();
}
public void mouseSingleClick(MouseEvent e)
{
for(MouseListener MouseListener:mouseListeners)
{
mouseListener.mouseClicked(e);
}
}
public void mouseDoubleClick(MouseEvent e)
{
for(MouseListener MouseListener:mouseListeners)
{
mouseListener.mouseClicked(e);
}
}
公共布尔值hasDoubleClick=false;
公共无效鼠标单击(最终鼠标事件我)
{
如果(me.getClickCount()==1)
{
新线程(newrunnable())
{
公开募捐
{
尝试
{
线程睡眠(单击“线程睡眠”);
SwingUtilities.invokeLater(新的Runnable()
{
公开募捐
{
如果(双击)
hasDoubleClick=false;
其他的
鼠标单击(我);
}
});
}
捕捉(中断异常e)
{
鼠标单击(我);
hasDoubleClick=false;
}
}
}).start();
}
其他的
{
如果(me.getClickCount()==2)
hasDoubleClick=true;
鼠标双击(我);
}
}
公共无效鼠标按下(MouseEvent e)
{
for(MouseListener MouseListener:mouseListeners)
{
老鼠压迫(e);
}
}
公共无效MouseEvent(MouseEvent e)
{
for(MouseListener MouseListener:mouseListeners)
{
mouseListener.mouselestered(e);
}
}
公共无效鼠标事件(鼠标事件e)
{
for(MouseListener MouseListener:mouseListeners)
{
mouseListener.mouseEntered(e);
}
}
公共无效mouseExited(MouseEvent e)
{
for(MouseListener MouseListener:mouseListeners)
{
mouseListener.mouseexitted(e);
}
}
}

双击时,没有一个简单的方法可以不单击

我曾经写过这篇文章,但它有一个缺点,你的点击会变得有点迟钝

用法示例:

    JLabel label = new JLabel("test");
    label.addMouseListener(new SingleClickInhibitorMouseListener(some other mouselistener));


public class SingleClickInhibitorMouseListener implements MouseListener
{
  public static final Integer CLICK_TRESHOLD = (Integer) Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");

  private Collection<MouseListener> mouseListeners = new ArrayList<MouseListener>();

  public SingleClickInhibitorMouseListener( MouseListener listener )
  {
    mouseListeners.add(listener);
  }

  public void addMouseListener( MouseListener listener )
  {
    mouseListeners.add(listener);
  }

  public void removeMouseListener( MouseListener listener )
  {
    mouseListeners.remove(listener);
  }

  public void removeAllListeners()
  {
    mouseListeners.clear();
  }

  public void mouseSingleClick( MouseEvent e )
  {
    for (MouseListener mouseListener : mouseListeners)
      {
      mouseListener.mouseClicked(e);
      }
  }

  public void mouseDoubleClick( MouseEvent e )
  {
    for (MouseListener mouseListener : mouseListeners)
      {
      mouseListener.mouseClicked(e);
      }
  }

  public boolean hasDoubleClick = false;

  public void mouseClicked( final MouseEvent me )
  {
    if ( me.getClickCount() == 1 )
      {
      new Thread(new Runnable()
      {
        public void run()
        {
          try
            {
            Thread.sleep(CLICK_TRESHOLD);
            SwingUtilities.invokeLater(new Runnable()
            {
              public void run()
              {
                if ( hasDoubleClick )
                  hasDoubleClick = false;
                else
                  mouseSingleClick(me);
              }
            });
            }
          catch (InterruptedException e)
            {
            mouseSingleClick(me);
            hasDoubleClick = false;
            }
        }
      }).start();
      }
    else
      {
      if ( me.getClickCount() == 2 )
        hasDoubleClick = true;
      mouseDoubleClick(me);
      }
  }

  public void mousePressed( MouseEvent e )
  {
    for (MouseListener mouseListener : mouseListeners)
      {
      mouseListener.mousePressed(e);
      }
  }

  public void mouseReleased( MouseEvent e )
  {
    for (MouseListener mouseListener : mouseListeners)
      {
      mouseListener.mouseReleased(e);
      }
  }

  public void mouseEntered( MouseEvent e )
  {
    for (MouseListener mouseListener : mouseListeners)
      {
      mouseListener.mouseEntered(e);
      }
  }

  public void mouseExited( MouseEvent e )
  {
    for (MouseListener mouseListener : mouseListeners)
      {
      mouseListener.mouseExited(e);
      }
  }
}
JLabel标签=新的JLabel(“测试”);
label.addMouseStener(新的SingleClickInhibitorMouseStener(其他一些MouseStener));
公共类SingleClickInhibitorMouseListener实现MouseListener
{
public static final Integer CLICK_TRESHOLD=(Integer)Toolkit.getDefaultToolkit().getDesktopProperty(“awt.multiClickInterval”);
private Collection mouseListeners=new ArrayList();
公共单键单击抑制器MouseStener(MouseStener侦听器)
{
添加(侦听器);
}
public void addMouseStener(MouseStener侦听器)
{
添加(侦听器);
}
public void removeMouseListener(MouseListener侦听器)
{
鼠标侦听器。删除(侦听器);
}
public void removeAllListeners()
{
mouseListeners.clear();
}
public void mouseSingleClick(MouseEvent e)
{
for(MouseListener MouseListener:mouseListeners)
{
mouseListener.mouseClicked(e);
}
}
public void mouseDoubleClick(MouseEvent e)
{
for(MouseListener MouseListener:mouseListeners)
{
mouseListener.mouseClicked(e);
}
}
公共布尔值hasDoubleClick=false;
公共无效鼠标单击(最终鼠标事件我)
{
如果(me.getClickCount()==1)
{
新线程(newrunnable())
{
公开募捐
{
尝试
{
线程睡眠(单击“线程睡眠”);
SwingUtilities.invokeLater(新的Runnable()
{
公开募捐
{
如果(双击)
hasDoubleClick=false;
其他的
鼠标单击(我);
}
});
}
捕捉(中断异常e)
{
鼠标单击(我);
hasDoubleClick=false;
}
}
}).start();
}
其他的
{
如果(me.getClickCount()==2)
hasDoubleClick=true;
鼠标双击(我);
}
}
公共无效鼠标按下(MouseEvent e)
{
for(MouseListener MouseListener:mouseListeners)