【问题标题】:How to know coordinates of java frame?如何知道java框架的坐标?
【发布时间】:2013-12-29 04:34:53
【问题描述】:

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

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

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

【问题讨论】:

  • 在我的回答中查看我的编辑。我想这就是你想要的。

标签: java swing jframe mouseevent point


【解决方案1】:

我只使用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 会在鼠标被拖动时触发一个事件

【讨论】:

  • 感谢我正在寻找的东西。还有一件事我的课实际上扩展了 jpanel。所以当我实现鼠标监听器时它给了我错误。
  • 没关系。它给你一个错误,因为你需要实现这两种方法。使用MouseMotionListener 时。 mouseDraggedmouseMoved
  • 对不起,这是一个错字。你需要实现MouseMotionListener,而不是MouseListener,我修好了。此外,两个mouseMoveds 是一个错字。你需要mouseMovedmouseDragged
  • MouseMotionListener 工作。谢谢身体。 :) 很抱歉,我本来可以更清楚我想要什么。
【解决方案2】:

您需要将MouseListener 添加到您的JFrame,然后您可以使用MouseEvent.getPoint 获取相对坐标

frame.addMouseListener(new MouseAdapter() {
    void mouseClicked(MouseEvent e) {
        System.out.println(e.getPoint());
    }
});

【讨论】:

    【解决方案3】:

    如果您由于某种模糊的原因在鼠标事件不可用的情况下需要坐标(在这种情况下,请查看其他答案),您可以使用 SwingUtilities.convertPointFromScreen() 将坐标从 @987654322 转换@ 到 Component 的坐标系。

    【讨论】:

    • 我不确定,但这就是我要找的。我想知道鼠标的位置,而不仅仅是点击时。
    • @OssoBuko 通常最好使用事件,这样只有当鼠标位置实际改变时才会读取位置。我写我的答案只是为了完整性,所以如果有人正在为不切实际的情况寻找解决方案,另一种方法是在同一个问题页面上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多