Мои слушатели мыши не работают. Кто-нибудь может мне помочь? Мне нужно переместить мяч туда, где была нажата моя мышь, а он не работает - PullRequest
0 голосов
/ 29 мая 2020

Это код, но он не работает. Я думал, что добавил правильную вещь, но слушатель мыши даже отвечает. Требуется большая помощь.

class Mouse implements MouseListener {
    /**
    * Moves the ball to the (x, y) location where the mouse has been clicked
    */
    public void mousePressed(MouseEvent e) {
        ball.setX(e.getX());
        ball.setY(e.getY());

        if (e.isMetaDown()) {
            ball.move(getX(), getY());
            repaint();
        }
        if (e.isShiftDown()) {
            ball.setRandomSpeed(20);
            ball.setLocation(Math.random(), Math.random());
            repaint();
        }
    }
}

Как видите, он не работает. Я не знаю, что случилось.

1 Ответ

0 голосов
/ 30 мая 2020

Вы работаете с java .awt.event.MouseEvent , верно?

Проблема в том, что вы вызываете методы на MouseEvent e, которые не работают так, как ожидалось в вашем случае. Методы e.isMetaDown() и e.isShiftDown() проверяют, отключен ли модификатор Meta или Shift для этого события. Я думаю, вы ищете способ проверить, нажали ли вы левую ( MouseEvent.BUTTON1) или правую кнопку мыши (MouseEvent.BUTTON3). Вы можете проконсультироваться на этой странице:

https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/event/MouseEvent.html

, чтобы проинформировать yoursef о методах, которые могут быть вызваны на MouseEvent s.

You можно попробовать эти два небольших изменения. (Но этот код не протестирован !!) Если вы хотите, чтобы кто-то протестировал код, опубликуйте минимальный воспроизводимый пример, как уже упоминалось в @DontKnowMuchBut Getting Better.

class Mouse implements MouseListener {
    /**
    * Moves the ball to the (x, y) location where the mouse has been clicked
    */
    public void mousePressed(MouseEvent e) {
        ball.setX(e.getX());
        ball.setY(e.getY());

        if (e.getButton().equals(MouseEvent.BUTTON1)) {
            ball.move(getX(), getY());
            repaint();
        }
        if (e.getButton().equals(MouseEvent.BUTTON2)) {
            ball.setRandomSpeed(20);
            ball.setLocation(Math.random(), Math.random());
            repaint();
        }
    }
}

Надеюсь, это полезно.

...