Слушатель мыши не выдает ошибок, но не срабатывает (java) - PullRequest
0 голосов
/ 28 мая 2020

Я следую коду, который нашел на geeksforgeeks , но слушатель мыши не запускается. Я подозреваю, что каким-то образом реализация runnable блокирует доступ к моему объекту платы, но я не уверен. Я нахожусь в той же лодке, что и OP этого сообщения .

public class Game extends Canvas implements MouseListener {

    JFrame jf = new JFrame();

    Game() {
        jf.getContentPane().add(this, BorderLayout.CENTER);
        jf.setSize(new Dimension(500,500+30));
        jf.setVisible(true);
        jf.addMouseListener(this);
    }

    public void mouseClicked(MouseEvent e){
        System.out.println("Hello World!");
    }

    public void mousePressed(MouseEvent e){}

    public void mouseReleased(MouseEvent e){}

    public void mouseEntered(MouseEvent e){}

    public void mouseExited(MouseEvent e){}

    public static void main(String[] args){
        Game game = new Game();
    }
}

Я подозреваю, но сомневаюсь, что слушатель мыши может не работать должным образом из-за того, что он был создан в не -stati c, но я сомневаюсь, что это проблема. Я пробовал переместить объявление в начало конструктора, но это не помогло.

Ответы [ 2 ]

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

Проблема заключалась в использовании Canvas вместо JPanel в качестве суперкласса. Когда я переключился, слушатель мыши начал срабатывать.

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

События будут регистрироваться только для компонента, у которого есть фокус. Который в вашей программе является вашей главной панелью, классом Game. Таким образом, быстрое исправление было бы просто изменить:

 jf.addMouseListener(this);

на

addMouseListener(this);

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

...