1

继续从这个问题开始,我正在我的中实现一个MouseMotionListenerJPanel以便我可以跟踪鼠标事件以传递给其中包含的对象。

这没有用,所以我用 a 实现了一个完全干净的JPanel(没有我的游戏面板有的其他东西)MouseMotionListener,但仍然没有用。它只是设置在一个非常简单JFrameFlowLayout.

我用错了吗?我是如何触发鼠标事件的?

JPanelMouseMotion班级:

import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JPanel;

public class JPanelMouseMotion extends JPanel implements MouseMotionListener {

    private static final long serialVersionUID = 1L;

    public JPanelMouseMotion() {
        super();
    }

    @Override
    public void mouseDragged(MouseEvent e) {
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        System.out.println(e.getX() + " / " + e.getY());
    }

}
4

1 回答 1

3

永远不会调用侦听器,因为它从未注册过。你应该打电话addMouseMotionListener注册。

public class JPanelMouseMotion extends JPanel implements MouseMotionListener {

    private static final long serialVersionUID = 1L;

    public JPanelMouseMotion() {
        super();
        addMouseMotionListener(this); // register this JPanel as a Listener
    }

    @Override
    public void mouseDragged(MouseEvent e) {
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        System.out.println(e.getX() + " / " + e.getY());
    }

}
于 2015-10-02T13:28:48.260 回答