идентифицируя двойной щелчок в Java - PullRequest
48 голосов
/ 29 октября 2010

Я хочу знать, как мы можем выполнить действие, если дважды щелкнуть мышью в компоненте.

Ответы [ 4 ]

81 голосов
/ 29 октября 2010
public void mouseClicked(MouseEvent event)
{
  if (event.getClickCount() == 2) {
    System.out.println("double clicked");
  }
}
20 голосов
/ 29 октября 2010

Предполагая, что вы имеете в виду Swing, назначьте MouseListener для вашего Компонента:

addMouseListener(new MouseAdapter(){
    @Override
    public void mouseClicked(MouseEvent e){
        if(e.getClickCount()==2){
            // your code here
        }
    }
});

Справка:

17 голосов
/ 24 сентября 2013

e.getClickCount()==2 недостаточно, если вы хотите, чтобы ваши пользователи делали несколько двойных кликов за короткую задержку.Вы ограничены конфигурацией рабочего стола.Вы можете получить его, посмотрев результат Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");

. Хороший способ обойти проблему - не использовать проверку getClickCount(), а использовать Timer, где вы можете выбрать максимальный интервал междущелкает и обрабатывает счет самостоятельно (очень просто).

Код, связанный:

boolean isAlreadyOneClick;

@Override
public void mouseClicked(MouseEvent mouseEvent) {
    if (isAlreadyOneClick) {
        System.out.println("double click");
        isAlreadyOneClick = false;
    } else {
        isAlreadyOneClick = true;
        Timer t = new Timer("doubleclickTimer", false);
        t.schedule(new TimerTask() {

            @Override
            public void run() {
                isAlreadyOneClick = false;
            }
        }, 500);
    }
}

Протестирован с Win Xp OS и отлично.

0 голосов
/ 31 марта 2019

Моя проблема заключается в том, что я должен отвечать одним способом, если пользователь нажимает один раз, и другим, если они нажимают более одного раза (моя виртуальная машина Swing, кажется, способна рассчитывать до четырех нажатий, когда я нажимаю несколько раз).Когда я запустил приведенный выше пример, мне показалось, что тройной щелчок считается одним.Итак, вот мой переписать.По сути, у меня есть запланированное задание, которое ждет, пока пыль не очистится, а затем проверяет количество зарегистрированных кликов.Ожидание 400 мс, кажется, работает лучше всего для меня.

JButton jButton = new JButton("Click Me!");
jButton.addMouseListener(new MouseAdapter() {
    private int eventCnt = 0;
    java.util.Timer timer = new java.util.Timer("doubleClickTimer", false);

    @Override
    public void mouseClicked(final MouseEvent e) {
        eventCnt = e.getClickCount();
        if ( e.getClickCount() == 1 ) {
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    if ( eventCnt == 1 ) {
                        System.err.println( "You did a single click.");
                    } else if ( eventCnt > 1 ) {
                        System.err.println("you clicked " + eventCnt + " times.");
                    }
                    eventCnt = 0;
                }
            }, 400);
        }
    }
});
...