События мыши, принимающие случайное количество кликов в Java - PullRequest
1 голос
/ 25 марта 2011

Цель кода на данный момент заключается в том, что сделка разворачивается назад и вперед между игроком 1 и игроком 2 и позволяет игроку, чей ход должен повернуть одну из своих фигур, невидимой (установите значок в ноль).Он работает прямо сейчас, переворачивает торговлю взад и вперед, и при клике части становятся невидимыми, но иногда это не первый клик.Это может занять 3 или 4 клика на правильную часть, прежде чем она изменится на ноль.Есть ли причина, по которой это могло бы произойти?

Robo2 - значок для фигур первых игроков, robo1 - значок для фигур вторых игроков.Части хранятся в массиве кнопок J в программе с иконкой, установленной как изображение игрока 1 или игрока 2.

public void mouseClicked(MouseEvent me) {
    JButton clicked = (JButton)me.getSource();

    if (player1) {
        if (clicked.getIcon() == Robo2) {
            clicked.setIcon(null);
            player1 = false;
            player2 = true;
        }
        else {
        }
    }
    else if (player2) {
        if (clicked.getIcon() == Robo1) {
            clicked.setIcon(null);
            player1 = true;
            player2 = false;
        }
        else {
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 26 марта 2011

Разобрался с решением, изменив слушателя мыши на слушателя действия, решил проблемы с отсутствующими щелчками.Использование событий, отправленных при нажатии кнопки, вместо определения самих нажатий кнопки.Спасибо за помощь.

1 голос
/ 25 марта 2011

когда вы дважды щелкаете (или трижды, или четыре раза) что-то в Java, вы получаете это:

  • 1-й клик: MouseEvent, clickCount = 1
  • 2-й клик: MouseEvent, clickCount = 2
  • 3-й клик: MouseEvent, clickCount = 3

и т.д.

так что представьте, что вы дважды щелкаете по кнопке player1. Первое событие изменило бы игрока на игрока 2; второе событие изменит его обратно на player1!

Чтобы исправить эту ситуацию - проверьте clickCount (me.getClickCount ()) и проигнорируйте событие, если оно не равно 1. Как и

if (me.getClickCount() > 1) {
  return;
}
// or else proceed as you do now
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...