我正在尝试开发一个非常基本的游戏,它涉及鼠标。所以我想要做的是获取鼠标的坐标来写一个整数。我搜索了互联网并找到了这个。
mouse_x=MouseInfo.getPointerInfo().getLocation().getX();
mouse_y=MouseInfo.getPointerInfo().getLocation().getY();
它部分工作,并在桌面上给了我鼠标的坐标。但我需要的是鼠标在框架上的坐标。所以,如果我只知道帧的开始(0,0)点的坐标(不是窗口的。没有工具栏的白色区域。)我可以计算鼠标的坐标。
提前谢谢。
或者,如果那不可能,我可以使用如何在全屏开发它
我总是需要知道鼠标的位置。当我在一个永无止境的while循环中运行它时,它应该刷新位置。
答案 0 :(得分:6)
我只使用e.getPoint()
返回点击鼠标的点。您可以使用框架实现MouseListener
,如果它不是主GUI组件,则可以向框架注册MouseListener
。
public class MyFrame extends JFrame implements MouseListener {
@Override
public void mouseClicked(MouseEvent e) {
Point p = e.getPoint();
int x = (int) p.getX();
int y = (int) p.getY();
// do something withe the x and y points
}
}
如果您执行上述操作,则还需要覆盖其他MouseListener
方法。虽然您不需要为它们实施任何操作
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
如果您的GUI类没有扩展JFrame
,那么您只需将侦听器注册到Frame,在这种情况下您只需要使用MouseAdapter
,这样您就可以实现0或更多动作方法(即只是mouseClicked
)
frame.addMouseListener(new MouseAdapter() {
void mouseClicked(MouseEvent e) {
Point p = e.getPoint();
int x = (int) p.getX();
int y = (int) p.getY();
// do somthing withe the x and y points
}
});
编辑 MouseMotionListener
“我想知道鼠标的位置,不仅仅是在点击时。”
如果您在任何给定时间都不知道鼠标的位置,您应该实施MouseMotionListener
并覆盖mouseDragged
和mouseMoved
public class MyFrame extends JFrame implements MouseMotionListener {
....
public void mouseMoved(MouseEvent e){
Point p = e.getPoint();
int x = (int) p.getX();
int y = (int) p.getY();
// do something withe the x and y points
}
public void mouseDragged(MouseEvent e){
}
}
mouseMoved
每次移动鼠标时都会触发一个事件,只要拖动鼠标,mouseDragged
就会触发一个事件
答案 1 :(得分:4)
您需要在JFrame中添加MouseListener,然后才能获得MouseEvent.getPoint
的相对坐标
frame.addMouseListener(new MouseAdapter() {
void mouseClicked(MouseEvent e) {
System.out.println(e.getPoint());
}
});
答案 2 :(得分:1)
如果由于某些不明原因,在鼠标事件不可用的情况下需要坐标(在这种情况下,请查看其他答案),您可以使用SwingUtilities.convertPointFromScreen()转换坐标MouseInfo
到Component
的坐标系。