MouseListener печатает сообщение несколько раз - PullRequest
0 голосов
/ 01 июля 2019

Итак, я пытаюсь создать видеоигру, используя Java Graphics, и мне нужно использовать MouseListener для кнопки «Play» на экране меню. Когда я нажимаю кнопку, она повторяет печать тестового текста, пока я удерживаю кнопку. Я думаю, что это было бы так же просто, как написание кода, который позволяет печатать его только один раз, но я не знаю, как это сделать.

Я пытался добавить метод возврата, но мне не повезло. Я также пытался переместить оператор MouseListener в mouseClicked, mouseEntered, mouseExited и mouseReleased, но безуспешно У меня была подобная проблема в прошлом, за исключением замены операторов печати открытием других окон.

вот оператор MouseListener

public void mousePressed(MouseEvent e) {
    if ((e.getButton() == 1)
            && (e.getX() >= Playx1 && e.getX() <= Playx1 + Playw1 && e.getY() >= Playy1 && e
            .getY() <= Playy1 + Playh1)) {
        System.out.println("Test Text, Replace line with method later");
    }
}

и цикл анимации МОЖЕТ быть важным, я не знаю

private Thread animationThread = new Thread(new Runnable() {
    public void run() {
        while (true) {
            repaint();
            try {Thread.sleep(10);} catch (Exception ex) {}

        }
    }
});

Я ожидаю, когда я нажимаю кнопку, чтобы отобразить «Тестовый текст, Заменить строку методом позже» только один раз, но вместо этого он продолжает отображаться, пока я нажимаю кнопку.

1 Ответ

0 голосов
/ 02 июля 2019

Я бы решил это следующим образом:

AtomicBoolean buttonIsPressed = new AtomicBoolean( false );

public void mousePressed( MouseEvent e ) 
{
    if( ((e.getButton() == 1)
        && (e.getX() >= Playx1 && e.getX() <= Playx1 + Playw1 && e.getY() >= Playy1 && 
        e.getY() <= Playy1 + Playh1))
        && !buttonIsPressed.compareAndExchange( false, true ) ) 
    {
        System.out.println("Test Text, Replace line with method later");
    }
}

public void mouseReleased( MouseEvent e ) 
{
    if( e.getButton() == 1 ) 
    {
        buttonIsPressed.compareAndExchange( true, false );
    }
}

Я предполагаю, что именно @inquizitive имел в виду их комментарий.

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