java 如何在每一帧上获取鼠标相对于JPanel的位置

xtfmy6hx  于 2023-05-12  发布在  Java
关注(0)|答案(2)|浏览(185)

现在我在做这个

mouseX = MouseInfo.getPointerInfo().getLocation().x;

但如果我移动JFrame,它就不再起作用了。
此外,我需要鼠标的位置,每次我移动我的鼠标,因为我想在我的游戏拖动的东西,因此鼠标事件不会工作。
如何获得每帧鼠标相对于JPanel的位置?
编辑1:好的,我已经想好了。我把鼠标的位置减去屏幕上的jframe位置,然后我得到鼠标在jpanel上的位置

6vl6ewon

6vl6ewon1#

问题是“如何在每一帧上获得鼠标相对于JPanel的位置”。
我从这里可以看出,您不必为每一帧提供鼠标事件,因此您必须轮询鼠标位置(相对于屏幕),并计算相对位置(相对于JPanel)。
总而言之,这让我觉得你想要这个:

Point p = MouseInfo.getPointerInfo().getLocation();
SwingUtilities.convertPointFromScreen(p, yourJPanel);
// Then use 'p', which was modified by method call above
polhcujo

polhcujo2#

假设您创建了一个JPanel,如下所示:
JPanel myJPanel = new JPanel;
您可以用途:
myJPanel.getMousePosition().xmyJPanel.getMousePosition().y分别获得鼠标的x和y坐标。这些将相对于JPanel的右上角。
请注意,如果鼠标不在面板内,或者面板不可见,则将返回null值,因此,如果您想要调用这些函数,请将使用它们的代码 Package 在try中,如下所示:

try{
    [insert code that uses myJPanel.getMousePosition().x/y here, if your mouse isn't inside the JPanel or the JPanel isn't visible, the code here will not be executed]
   }catch(NullPointerException e) {[if your mouse isn't inside the JPanel or the JPanel isn't visible, code placed here will be executed]}

这将阻止代码在鼠标超出JPanel边界或JPanel不可见的情况下抛出错误。
如果您只打算在鼠标位于可见JPanel中时执行代码,那么这可以很好地工作,但否则,我将坚持使用其他方法来获取鼠标坐标。
它对于执行诸如单击JPanel中的对象之类的操作非常有用,但它也有局限性。

相关问题