在“世界风”中单击时禁用地球仪移动

2024-01-08

我正在尝试在“世界风”中单击鼠标禁用地球仪的移动。我期望能够做到:

void disableGlobeDrag(WorldWindowGLCanvas ww) {
    ww.addMouseMotionListener(new MyMouseMotionListener());
}

where MyMouseMotionListener消耗所有鼠标事件。这不起作用,所以我必须这样做:

void disableGlobeDrag(WorldWindowGLCanvas ww) {
    for(MouseMotionListener l : ww.getMouseMotionListeners()) {
        if(l.getClass().toString().equals("class gov.nasa.worldwind.awt.AWTInputHandler")) {
            ww.removeMouseMotionListener(l);
        }
    }
}

消耗的鼠标事件是否仍应到达gov.nasa.worldwind.awt.AWTInputHandler听众?

Update: WorldWindowGLCanvas正在打电话addMouseMotionListener() on java.awt.Component所以显然我不明白消费事件是如何工作的。

更新2:尽管与 Swing 共享接口,但调用WorldWindowGLCanvas.removeMouseMotionListener() with AWTInputHandler因为论证会阻止所有其他MouseMotionListeners 来自接收事件。添加和删​​除方法AWTInputHandler应该使用。


不幸的是删除了MouseMotionListener正如 @trashgod 所建议的那样,这不起作用,因为发生了一些 World Wind 特定行为:删除gov.nasa.worldwind.awt.AWTInputHandler导致其他MouseMotionListeners 停止接收事件通知。

禁用地球仪拖动并仍然在另一个中接收事件MouseMotionListener需要采取以下步骤:

获取 World Wind 的参考AWTInputHandler:

AWTInputHandler wwHandler = null;
// get World Wind's AWTInputHandler class:
for (MouseMotionListener l : ww.getMouseMotionListeners()) {
    if(l instanceof AWTInputHandler) {
        wwHandler = (AWTInputHandler)l;
        break;
    }
}

创建一个MouseMotionListener它消耗事件:

public class MyMouseMotionListener implements MouseMotionListener {
    @Override
    public void mouseDragged(MouseEvent e) {
        // consume the event so the globe position does not change
        e.consume();
        if (e.getSource() instanceof WorldWindowGLCanvas) {
            // get the position of the mouse
            final WorldWindowGLCanvas canvas = ((WorldWindowGLCanvas) e.getSource());
            final Position p = canvas.getCurrentPosition();
            // do something with the position here
        }
    }
    @Override
    public void mouseMoved(MouseEvent e) {
        e.consume();
    }
}

添加鼠标移动监听器AWTInputHandler:

if(wwHandler != null) {
    wwHandler.addMouseMotionListener(new MyMouseMotionListener());
} else {
    // I don't think this should happen unless the AWTInputHandler
    // is explicitly removed by client code
    logger.error("Couldn't find AWTInputHandler");
}

也就是说,我不知道为什么WorldWindowGLCanvas正在使用Component.addMouseMotionListener()而不是AWTInputHandler.addMouseMotionListener().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在“世界风”中单击时禁用地球仪移动 的相关文章

随机推荐

  • 在 PHP 中的两个进程之间共享文件句柄是否安全?

    我找到了类似的问题 https stackoverflow com q 2358684 759866在 Stack 上 但我不确定它们是否适用于 PHP 我想创建子进程pcntl fork http php net manual en fu
  • 如何使用 Java 8 DateTime API 从序列值本地日期时间获取 POSIX 时间 (UTC)

    我有一个类似于POSIX 时间 https en wikipedia org wiki Unix time唯一的例外是它不被计算在内UTC https en wikipedia org wiki Coordinated Universal
  • Spring STS 挂起的原因可能是什么?

    有时在启动时 STS 会挂起 能找到原因吗 可能存在日志或可能在调试模式下启动 另外 我如何区分完全挂起和工作速度非常慢 谢谢 附 怎么修 这通常是出于与此处描述的相同原因加速日食的技巧 https stackoverflow com qu
  • C# Lambda 返回一些空值

    opencall Priority averages Where x gt x ProblemCode opencall ProblemCode SingleOrDefault Priority 上面的 lambda 语句返回一些空值 因为
  • 将 NSDate 转换为其他格式[重复]

    这个问题在这里已经有答案了 可能的重复 NSDateFormatter 和 yyyy MM dd https stackoverflow com questions 5087173 nsdateformatter and yyyy mm d
  • 是否逐行替换并将覆盖字典中的值两次?

    假设我有以下数据集 lst u v w x y lst rev list reversed lst dct dict zip lst lst rev df pd DataFrame A a b a c a B lst dtype categ
  • 如何在客户端使用 JavaScript 检查 webRTC 数据通道兼容性?

    WebRTC 数据通道仅在 Firefox nightly 中工作 如何在客户端查看 代码如下 if Firefox s d d test navigator userAgent test for Firefox x x or Firefo
  • 让 fields_for 与 has_many 关系一起工作

    我在生成嵌套模型表单时遇到问题 这是我的模型 class Workout lt ActiveRecord Base has many scores has many users through gt scores accepts neste
  • Fiddler 使网页浏览速度非常慢

    虽然 Fiddler 对我来说工作得很好 但它似乎确实使浏览速度变得非常慢 在 Fiddler 运行的情况下打开这个网站只需要大约十秒钟 如果我关闭它 它几乎会立即加载 我想知道这是否就是 Fiddler 的工作方式 或者是否有一个选项或设
  • 我如何克隆/复制某种 iOS 的 UIView?

    下面的屏幕截图有助于解释我想要做什么 这背后的想法是我有一个UIView 与各种不同的UI里面的元素 例如 假设我有一个UIView 里面有一个UILabel 现在我想复制UIView 里面有标签 但不知何故之后我可能需要对标签进行更改 例
  • Vue.JS 倒计时不起作用

    我有一个 vue 应用程序 但倒计时效果不好 其实我不知道为什么 View parent timer 我看到了很好的价值 视图数据 data function return timer 3 这是我的倒计时功能 countdown funct
  • 检查 windows/page/document/iframe 是否有焦点

    我已经问过类似的问题 但我需要它来解决更具体的情况 所以我决定提出一个新问题 以免混淆 检查窗口是否有焦点 https stackoverflow com questions 17389280 check if window has foc
  • 确保一次仅运行一个 setTimeout(处于活动状态)?

    递归setTimeout函数 getRandomProducts 被调用onload在html body标签中 如此不断地迭代 正在调用函数 setCategoryTreeonclick来自导航栏嵌套 ul 中的链接 然后 该函数将变量 m
  • 图像处理中的联合直方图和边缘直方图是什么?

    什么是图像处理中的联合直方图和边缘直方图 它们如何工作以及如何构建联合直方图和边缘直方图 如果可能的话 提供简单的示例 例如 如果我有 10 个维度的特征空间 并且想要构建一个直方图 每个维度量化为 20 个值 如何计算联合直方图和边缘直方
  • gem 已安装,但“rails”命令不起作用

    当我运行任何 Rails 命令时 例如rails s我收到以下错误 在任何来源中均找不到 diff lcs 1 1 2 尝试跑步bundle install 不过 我已经安装了 diff lcs 捆绑显示 diff lcs opt loca
  • 为什么使用 SpringJUnit4ClassRunner/MySQL/Spring/Hibernate 时事务不回滚

    我正在进行单元测试 我希望提交给 MySQL 数据库的所有数据都将被回滚 但事实并非如此 尽管我的日志显示正在发生回滚 但数据正在提交 我已经为此奋斗了几天 所以我的设置发生了很大变化 这是我当前的设置 登录DAOTest java Run
  • C++ 中紧密耦合的并行类层次结构

    对于上下文 我正在研究 C 人工生命系统 http github com taliesinb floatworld 涉及由循环神经网络控制的代理 但细节并不重要 我需要将代理的 大脑 和 身体 的两个对象层次结构分开 我想要各种不同的大脑和
  • 抛出新的异常最佳实践[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 以下是好的做法吗 如果不是 应该做什
  • 如何使用 .NET / GDI+ 禁用子采样?

    我正在尝试使用 Bitmap 类保存 JPEG 图像 我注意到无论我指定的质量级别如何 锐利的边缘总是模糊的 我发现这是由于一个或多个通道的二次采样造成的 如何在保存图像时禁用子采样 我目前正在使用这段代码 EncoderParameter
  • 在“世界风”中单击时禁用地球仪移动

    我正在尝试在 世界风 中单击鼠标禁用地球仪的移动 我期望能够做到 void disableGlobeDrag WorldWindowGLCanvas ww ww addMouseMotionListener new MyMouseMotio