MouseListener не срабатывает достаточно быстро - PullRequest
6 голосов
/ 03 сентября 2010

У меня есть класс, расширяющий JFrame, который отслеживает щелчок мыши в любом месте:

addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent e){
        System.out.println("mouse was clicked");
    }
});

Обычно мне приходится ждать около секунды между щелчками, чтобы вызвать событие.Если я делаю 2 или 3 клика в секунду, срабатывает только одно событие.Как вы наблюдаете за событиями быстрого нажатия?

Я впервые использую Java, а я использую NetBeans.

Ответы [ 3 ]

14 голосов
/ 03 сентября 2010

Попробуйте использовать mousePressed вместо mouseClicked. mouseClicked ищет несколько нажатий кнопок, поэтому он объединяет некоторые события.

2 голосов
/ 04 января 2014

Надеюсь, это поможет через 3,5 года всем, кто ищет ответы на ту же проблему:)

Когда вы щелкаете мышью, вы запускаете следующие события.

  1. MousePressed
  2. MouseDragged (если вы нажали достаточно сильно, чтобы переместить курсор немного)
  3. MouseReleased
  4. MouseClicked

Я столкнулся с этой самой проблемой, делая события ленивыми в Netbeans, используя их утилиту Forms. Я обнаружил, что случайное перетаскивание моей мыши между нажатием и выпуском убило событие щелчка. Работа по назначению или незначительная ошибка JVM и Netbeans? Я не знаю.


В качестве обходного пути я использовал регистрацию событий MousePressed и MouseReleased для имитации щелчка. Если Нажатие и отпускание не происходят на одном и том же объекте, MouseReleased ничего не сделает.

Если «Нажатие и отпускание» происходят на одном и том же объекте, я вызываю свой метод с соответствующими параметрами для использования события.

Обратите внимание, что, поскольку я обрабатываю щелчки на JFrame, он является единственным объектом свинга, поэтому я передаю объект Point координат мыши и сравниваю оба, обеспечивая их попадание в указанный прямоугольник.

1 голос
/ 03 сентября 2010

Чтобы немного рассказать о том, что сказал @Рики Кларксон: MousePressed будет срабатывать при каждом нажатии кнопки мыши;MouseReleased будет срабатывать при каждом отпускании кнопки мыши, а события MouseClicked будут срабатывать каждый раз, когда ОС чувствует, что пользователь нажал (т. Е. Они нажали достаточно, чтобы переполнить счетчик кликов, или времени было достаточно с момента последнего нажатиячтобы он считался завершенным щелчком). пользователь нажимает и отпускает событие мыши.

Если вы хотите получить информацию о нажатии мыши, используйте событие MousePressed.В противном случае вы получите событие MouseClicked всякий раз, когда ОС хочет передать его Java, что может сильно зависеть от настроек системы (т. Е. Длительности задержки, установленной в параметрах системы, например, на панели управления), чтобыразрешить двойные клики).

Надеюсь, это поможет прояснить ситуацию.


Редактировать: Удалены мои заявления, относящиеся к информации об ОС - похоже, я ошибался, вспоминая, как это работало.Мои извинения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...