如何知道java框架的坐标?

时间:2013-12-28 10:32:47

标签: java swing jframe mouseevent point

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

mouse_x=MouseInfo.getPointerInfo().getLocation().getX();
mouse_y=MouseInfo.getPointerInfo().getLocation().getY();

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

3 个答案:

答案 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并覆盖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){

    }
}

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()转换坐标MouseInfoComponent的坐标系。