Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我试图将 mouseListener 和 mouseMotionListener 添加到我的游戏中,并注意到我可以将它们添加到 Canvas 或 JFrame。我将其添加到两者还是其中之一?
我推荐的是使用画布。当您使用任何类型的侦听器时,请考虑操作将在何处发生。您的所有更新都发生在框架上还是画布上?如果是后者,请使用画布处理所有动作侦听器对象。
另一种思考方式是,JFrame 只是一个包含游戏实现的窗口。您的图形更新、键盘输入、鼠标输入和任何其他功能都是通过画布完成的。
例如,将 JFrame 和画布与 Skyrim 的这张图像进行比较。外部的窗口(一个 JFrame 对象)具有关闭/最小化功能,并且该窗口包含游戏屏幕(一个 Canvas 对象)。
将其附加到画布上
您应该将鼠标侦听器添加到画布,原因之一是: 坐标。
如果将鼠标侦听器附加到框架,则坐标的 0 点将位于JFrame 边框的左上角。很难计算相对于画布的坐标。
而不是您可以将鼠标侦听器附加到 Canvas。有了这个坐标会更好。但不要忘记在添加监听器后将注意力集中在画布上:
canvas.addMouseMotionListener(motionListener); canvas.requestFocus();