События мыши Java игнорируются при движении мыши?

Недавно я работал над 2D-игрой на java и в настоящее время пытаюсь заставить систему обработки событий работать правильно. Я пытался получить щелчок мыши, чтобы запустить анимацию, и это работало, пока я не попытался двигать мышь во время щелчка. В этот момент вообще ничего не происходит. Я использую классы mouselistener и mousemotionlistener, и проблема все еще сохраняется. Вот код из Main:

public class ML extends MouseAdapter{
   public void mouseClicked(MouseEvent m){
       if(m.getButton()==MouseEvent.BUTTON1)
       guns.playOnce();
   }
   public void mouseReleased(MouseEvent m){
       if(m.getButton()==MouseEvent.BUTTON1);
   }

Он вызывает класс аниматора для воспроизведения набора изображений один раз и остановки. Аниматор работал отлично до того, как я включил события мыши. Я не могу понять, почему это не будет работать во время движения мыши, если во время этого движения мыши не будет выполняться определенное действие. (Если есть очевидное решение, извиняюсь, я начал java не так давно.)


person Ryan    schedule 20.01.2012    source источник


Ответы (1)


В Java щелчок мыши регистрируется только в том случае, если мышь нажата и отпущена без перемещения мыши. Это сложно для большинства пользователей, поэтому большинство элементов пользовательского интерфейса (например, кнопки) реагируют на события нажатия и отпускания мыши и игнорируют «щелчок».

Однако для кнопки лучше добавить к ней ActionListener. Затем кнопка сама будет прослушивать события мыши и решать, когда она была нажата.

person Russell Zahniser    schedule 20.01.2012
comment
Спасибо! Подсказка о щелчке избавит меня от разочарования позже. - person Ryan; 20.01.2012
comment
@trashgod: Ну, на самом деле ButtonModel просто отслеживает состояние, а ButtonUI прослушивает события мыши и обновляет модель. - person Russell Zahniser; 20.01.2012