2012-04-16 18 views
1

私はatとdoubleとsingle clickで特定のアクションを実行する必要があるjava swing GUIを持っています。 私はこのコードを持っていますjava右ダブルクリックマウスイベントは、Mac OS X上で左ダブルクリックマウスイベントと同じように動作します。

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

正しく動作します。問題は、このコードが左右のマウスクリックで同じように動作することです。私はダブルクリックで何もしたくない。単一の右クリックでポップアップメニューを表示したいだけです。

私の体は私をご案内ください。あなたは、イベントを発生させたボタン、あなたのMouseEventオブジェクト(変数「E」)で、チェックするために持っているおかげ

+0

*「右ダブルクリックマウスイベント」* Windows 7で「右ダブルクリックマウスイベントが」コンテキストメニューを開く(または類似)の効果があり、その後で2回目のクリックを無視します。その「最小の驚きのパス」を変更するためのユースケースは何ですか? –

答えて

3

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

関連する問題