【问题标题】:Do I add MouseListeners to the Canvas or to JFrame我是否将 MouseListeners 添加到 Canvas 或 JFrame
【发布时间】:2018-05-25 16:49:24
【问题描述】:

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

【问题讨论】:

标签: java canvas jframe mouselistener mousemotionlistener


【解决方案1】:

将其附加到画布上

您应该将鼠标侦听器添加到画布,原因有一个: 坐标。

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

您也可以将鼠标侦听器附加到 Canvas。有了这个坐标会更好。但是不要忘记在添加监听器后将焦点放在画布上:

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

【讨论】:

    【解决方案2】:

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

    另一种思考方式是,JFrame 只是一个包含游戏实现的窗口。您的图形更新、键盘输入、鼠标输入和任何其他功能都是通过画布完成的。

    例如,将 JFrame 和画布与 Skyrim 的这张图片进行比较。外部的窗口(一个 JFrame 对象)具有关闭/最小化功能,该窗口包含游戏屏幕(一个 Canvas 对象)。

    【讨论】:

      猜你喜欢
      • 2017-04-08
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      • 2013-06-28
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多