2012-04-16 110 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