Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mouseMoved事件似乎只被调用一次_Java_Jframe_Mousemotionlistener - Fatal编程技术网

Java mouseMoved事件似乎只被调用一次

Java mouseMoved事件似乎只被调用一次,java,jframe,mousemotionlistener,Java,Jframe,Mousemotionlistener,试图用头顶上的摄像机制作一个简单的RPG游戏。当我去实现一个MouseMotionListener时,这不是我第一次使用MouseMotionListener,它似乎只调用了一次mousedmouseevent,然后simple似乎不再工作了。我已经在这上面呆了很长一段时间了,我所有的研究都把我带到了死胡同 我有一个完整的游戏循环和一个记号和渲染方法。但正如您在下面的代码中看到的,在鼠标处理类(代码的底部位)中,它返回一个数字,该数字在每次鼠标移动时增加一个(在tick方法中,我向控制台打印该数

试图用头顶上的摄像机制作一个简单的RPG游戏。当我去实现一个MouseMotionListener时,这不是我第一次使用MouseMotionListener,它似乎只调用了一次mousedmouseevent,然后simple似乎不再工作了。我已经在这上面呆了很长一段时间了,我所有的研究都把我带到了死胡同

我有一个完整的游戏循环和一个记号和渲染方法。但正如您在下面的代码中看到的,在鼠标处理类(代码的底部位)中,它返回一个数字,该数字在每次鼠标移动时增加一个(在tick方法中,我向控制台打印该数字的值),并且它还应向控制台打印鼠标x和y坐标。运行程序时,数字等于1,并且只打印鼠标坐标一次。例如,控制台输出如下所示:

124 82
1
0
或者,如果我的鼠标在程序启动时未悬停在JFrame上,它将如下所示:

124 82
1
0
以下是我的游戏循环的init方法:

private void init() {
    display = new Display("Operation Blood Bath: Alpha 0_5.0", 800, 600);
    game = new Game();
    Assets.init();
}
下面是我在init方法中调用的display类:

public class Display {

private JFrame frame;
private Canvas canvas;

public Display(String title, int width, int height) {
    frame = new JFrame(title);
    frame.setSize(width, height);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);

    canvas = new Canvas();
    canvas.setPreferredSize(new Dimension(width, height));
    canvas.setMaximumSize(new Dimension(width, height));
    canvas.setMinimumSize(new Dimension(width, height));
    canvas.setFocusable(false);

    frame.add(canvas);
    frame.addMouseMotionListener(new MouseMotionHandling());
    frame.pack();
}

public Canvas getCanvas() {
    return canvas;
}

public JFrame getFrame() {
    return frame;
}

}
勾选法:

private void tick() {
    game.tick();
    System.out.println(MouseMotionHandling.HELLO());
}
下面是在display类中调用的鼠标处理类:

public class MouseMotionHandling implements MouseMotionListener {

private static int number = 0;

@Override
public void mouseDragged(MouseEvent arg0) {

}

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

public static int HELLO () {
    return number;
}

}

我要在哪里工作?

问题是您的
画布
完全填充了
JFrame
的内容窗格,因此捕获了所有鼠标事件。最简单的修复方法是将鼠标侦听器添加到
画布
而不是
框架


至于为什么您在帧上接收到一个鼠标事件,我认为这一定是由于在创建各个组件时出现了时间问题。

!非常感谢你。