2

mouseClickedの代わりにmouseReleasedメソッドを使用する必要があるため、ダブルクリックをインターセプトする方法を見つける必要があります。これはコードです:

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

問題は、ダブルクリックするとシングルクリックイベントも発生することです。誰かがそれを修正する方法を知っていますか?ありがとう

4

3 に答える 3

1

1.getClickCount()クラスのメソッドメソッドを使用しますMouseEvent

2.これは、クリックのタイプを取得するのに役立ちます..シングル、ダブル、トリプルなど。

詳細については、こちらをご覧ください。

http://docs.oracle.com/javase/6/docs/api/java/awt/event/MouseEvent.html

于 2012-08-06T12:59:47.613 に答える
0

ダブルクリックしたときにシングルクリックしないという単純な修正はありません

私はこれを一度書きましたが、欠点があります。シングルクリックが少し遅くなります

使用例:

    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);
      }
  }
}
于 2012-08-06T13:24:15.840 に答える
0
    public void mouseClicked(MouseEvent evt) { 
    if (evt.getButton()==MouseEvent.BUTTON1){
        leftClick = true; clickCount = 0;
        if(evt.getClickCount() == 2) doubleClick=true;
        Integer timerinterval = (Integer)Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");

                   timer = new Timer(timerinterval, new ActionListener() {
                    public void actionPerformed(ActionEvent evt) {  
                        if(doubleClick){
                            System.out.println("double click.");
                            sb = new StringBuffer();
                            sb.append("Double Click");
                            clickCount++;
                            if(clickCount == 2){
                                rfbProto.capture();
                                clickCount=0;
                                doubleClick = false;
                            }

                        } else {

                            sb = new StringBuffer();
                            sb.append("Left Mouse");
                            System.out.println("single click.");
                            rfbProto.capture();
                        }
                    }               
                });
                timer.setRepeats(false);
                timer.start();
                if(evt.getID()==MouseEvent.MOUSE_RELEASED) timer.stop();
    }           
    }
于 2013-01-20T08:29:29.197 に答える