如何知道java框架的坐标?

oss*_*uko 1 java swing point jframe mouseevent

我正在尝试开发一个非常基本的游戏,它涉及鼠标.所以我想要做的是获取鼠标的坐标来写一个整数.我搜索了互联网并找到了这个.

mouse_x=MouseInfo.getPointerInfo().getLocation().getX();
mouse_y=MouseInfo.getPointerInfo().getLocation().getY();
Run Code Online (Sandbox Code Playgroud)

它部分工作,并在桌面上给我鼠标坐标.但我需要的是鼠标在框架上的坐标.所以,如果我只知道帧的起始点(0,0)(不是窗口的那个,没有工具栏的白色区域)的坐标.我可以计算鼠标的坐标.
提前致谢.
或者,如果那不可能,我可以使用如何在全屏幕中开发它.
我总是需要知道鼠标的位置.当我在一个永无止境的while循环中运行它时,它应该刷新位置.

Pau*_*tha 6

我只是用e.getPoint()它返回点击鼠标的点.你可以拥有你的Frame工具MouseListener,MouseListener如果它不是主GUI组件,你可以注册到框架.

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
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您执行上述操作,则还需要覆盖其他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) {
}
Run Code Online (Sandbox Code Playgroud)

如果你的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
   }
});
Run Code Online (Sandbox Code Playgroud)

编辑MouseMotionListener

"我想知道鼠标的位置,不仅仅是点击时."

如果你不知道在任何给定时间鼠标的位置,你应该实现MouseMotionListener和覆盖mouseDraggedmouseMoved

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){

    }
}
Run Code Online (Sandbox Code Playgroud)

mouseMoved会在每次移动鼠标时触发事件,并且mouseDragged只要拖动鼠标会触发一个事件