2012-04-16 114 views
1

我有一个java swing GUI,其中at必须在双击和单击时执行特定操作。 我有此代码java右键双击鼠标事件行为与Mac OS X上的左双击鼠标事件相同

if (e.getClickCount() == 1) 
    { 
    // do something on single click 
    } 
    if (e.getClickCount() == 2) 
    { 
    // do something on double click 
    } 

其工作正常。问题是这个代码在右键和左键点击时表现相同。我不想在双击右键上执行任何操作。只想单击右键显示一个弹出式菜单。

任何机构请指导我。感谢

+0

*“右鼠标双击事件” *在Windows 7上是一种“权利双击鼠标事件”有打开上下文菜单(或类似)的影响则忽略第二次点击。改变“最不可思议的道路”的用例是什么? – 2012-04-16 13:32:06

回答

3

你得检查一下,在您的MouseEvent对象(变量“E”),该按钮引起事件:

if(e.getClickCount() == 2){ // two clicks, ok 
    if((e.getModifiers() & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK){ 
    // clicks are from BUTTON1, aka left click 
    // double left click, insert code here  
    } 
} 
1

您可以使用此代码,其中Double_ClickSwing Timer,另一个检查选项是使用Toolkit(从未使用过),也许more info here

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class ClickListener extends MouseAdapter implements ActionListener { 

    private final static int clickInterval = (Integer) Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval"); 
    private MouseEvent lastEvent; 
    private Timer timer; 

    public ClickListener() { 
     this(clickInterval); 
    } 

    public ClickListener(int delay) { 
     timer = new Timer(delay, this); 
    } 

    @Override 
    public void mouseClicked(MouseEvent e) { 
     /*if (e.getClickCount() > 2) { 
      return; 
     } 
     lastEvent = e; 
     if (timer.isRunning()) { 
      timer.stop(); 
      doubleClick(lastEvent); 
     } else { 
      timer.restart(); 
     }*/ 

     if (timer.isRunning() && !e.isConsumed() && e.getClickCount() > 1) { 
      System.out.println("double"); 
      timer.stop(); 
     } else { 
      timer.restart(); 
     } 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     timer.stop(); 
     singleClick(lastEvent); 
    } 

    public void singleClick(MouseEvent e) { 
    } 

    public void doubleClick(MouseEvent e) { 
    } 

    public static void main(String[] args) { 
     JFrame frame = new JFrame("Double Click Test"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.addMouseListener(new ClickListener() { 

      @Override 
      public void singleClick(MouseEvent e) { 
       System.out.println("single"); 
      } 

      @Override 
      public void doubleClick(MouseEvent e) { 
       System.out.println("double"); 
      } 
     }); 
     frame.setPreferredSize(new Dimension(200, 200)); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 
+0

这也工作。谢谢 – Asghar 2012-04-16 13:32:07