我是将 MouseListeners 添加到 Canvas 还是添加到 JFrame

Do I add MouseListeners to the Canvas or to JFrame

我试图将 mouseListener 和 mouseMotionListener 添加到我的游戏中,发现我可以将它们添加到 Canvas 或 JFrame。我是将它添加到两者还是其中之一?

我推荐的是使用Canvas。当您使用任何类型的侦听器时,请考虑操作将发生的位置。您的所有更新是在框架上还是在 canvas 上进行的?如果是后者,请使用 canvas 来处理所有动作侦听器对象。

另一种思考方式是,JFrame 只是一个 window 用来保存游戏的实现。您的图形更新、键盘输入、鼠标输入和任何其他功能都是通过 canvas.

完成的

例如,将 JFrame 和 canvas 与这张 Skyrim 图像进行比较。外部的 window(A JFrame 对象)具有 close/minimize 功能,window 包含游戏屏幕(A Canvas 对象)。

将其附加到 Canvas

您应该将鼠标侦听器添加到 canvas,这样做的原因之一是: 坐标。

如果将鼠标侦听器附加到框架,坐标的 0 点将位于 JFrame 边框 的左上角。相对于 canvas 的坐标将很难计算。

您可以 将鼠标侦听器附加到 Canvas。这样坐标会更好。但是不要忘记在添加监听器后关注canvas:

canvas.addMouseMotionListener(motionListener);
canvas.requestFocus();