【问题标题】:Getting the EXACT coords of Mouse in Java在 Java 中获取鼠标的精确坐标
【发布时间】:2011-06-20 10:15:49
【问题描述】:

好的,我知道该怎么做,但它正在做一些奇怪的事情。

我正在尝试获取正确的 X Y 坐标,以便 JMenu 出现。我找到了一种方法,但这只是一种黑客行为。在我添加字符面板之前,所有的右键单击都发生在JList 上,所以假设您在左上角附近单击右键。您希望 Y 坐标约为 40~ 像素,Y 坐标约为 100~ 像素,对吧?因为您单击的是JList 所在的左侧。错误的。当我希望它从整个应用程序的左上角开始计数时,x y 坐标从 JList 的左上角开始计数。 :S

那么,我做了什么?由于 Y 坐标是正确的,我在 X 坐标上添加了 512 个像素,因此它始终在 JList 中。像这样:

                int newMouseX = 512+e.getX();
                popup.show(tileOffline.this, newMouseX, e.getY()); // show item at mouse

但是,正如您所知,我不会永远右键单击JList

我怎样才能从整个小程序中获得鼠标的确切 X Y 坐标?

这是描述没有 512 hack 的情况的图片:

【问题讨论】:

  • 您已经获得了关于“如何显示弹出菜单”(stackoverflow.com/questions/4854185/…) 的 Swing 教程的链接。您需要的代码在教程中。阅读教程。运行代码示例。理解代码示例。当您遇到问题时,发布您的 SSCCE(不是图片)。当我们花时间回答您的问题而您甚至无法阅读教程时,这会令人沮丧。

标签: java user-interface swing


【解决方案1】:

我想知道你是否让这件事变得比需要的更难。弹出菜单将相对于您传递给 show 方法 (JPopupMenu API) 的组件定位自身。您应该能够显示弹出菜单执行类似这样的操作,以使其显示在正确的位置:

popup.show(myJList, e.getX(), e.getY());

【讨论】:

【解决方案2】:

SwingUtilities 具有适用于屏幕坐标转换的方法,以及Components 之间的方法。

【讨论】:

    【解决方案3】:

    您可以使用 javax.swing.SwingUtilities 中的 convertPointToScreen 转换为屏幕坐标 - 只需传入您点击的组件!

    convertPointToScreen(Point p, Component c)
    

    http://download.oracle.com/javase/6/docs/api/javax/swing/SwingUtilities.html

    【讨论】:

      【解决方案4】:

      使用MouseEvent.getXOnScreen()MouseEvent.getYOnScreen() 方法。

      当您移动或单击鼠标时生成的MouseEvent 包含屏幕上的绝对坐标。使用这两种方法来获取它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-02
        • 2015-11-03
        • 2018-07-09
        • 1970-01-01
        • 2022-12-10
        • 2010-12-03
        • 1970-01-01
        相关资源
        最近更新 更多