簡體   English   中英

java右鍵雙擊鼠標事件的行為與Mac OS X上的左鍵雙擊鼠標事件相同

[英]java right double click mouse event behaves same as left double click mouse event on Mac OS X

我有一個java swing GUI,其中必須執行雙擊和單擊的特定操作。 我有這個代碼

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

它的工作正常。 問題是此代碼對於鼠標右鍵和左鍵單擊的行為相同。 我不想對雙擊右鍵執行任何操作。 只想在單擊右鍵時顯示​​彈出菜單。

任何身體請指導我。 謝謝

您必須在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      
    }
}

您可以使用此代碼,其中在Swing Timer內部檢查Double_Click ,另一個選項是使用Toolkit (從未使用過),也許更多信息在這里

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM