Point p = MouseInfo.getPointerInfo().getLocation();
SwingUtilities.convertPointFromScreen(p, yourJPanel);
// Then use 'p', which was modified by method call above
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]}
2条答案
按热度按时间6vl6ewon1#
问题是“如何在每一帧上获得鼠标相对于JPanel的位置”。
我从这里可以看出,您不必为每一帧提供鼠标事件,因此您必须轮询鼠标位置(相对于屏幕),并计算相对位置(相对于JPanel)。
总而言之,这让我觉得你想要这个:
polhcujo2#
假设您创建了一个JPanel,如下所示:
JPanel myJPanel = new JPanel;
您可以用途:
myJPanel.getMousePosition().x
和myJPanel.getMousePosition().y
分别获得鼠标的x和y坐标。这些将相对于JPanel的右上角。请注意,如果鼠标不在面板内,或者面板不可见,则将返回null值,因此,如果您想要调用这些函数,请将使用它们的代码 Package 在
try
中,如下所示:这将阻止代码在鼠标超出JPanel边界或JPanel不可见的情况下抛出错误。
如果您只打算在鼠标位于可见JPanel中时执行代码,那么这可以很好地工作,但否则,我将坚持使用其他方法来获取鼠标坐标。
它对于执行诸如单击JPanel中的对象之类的操作非常有用,但它也有局限性。