【问题标题】:Swing & JavaFX: how to convert JavaFX MouseEvent to Swing MouseEvent?Swing & JavaFX:如何将 JavaFX MouseEvent 转换为 Swing MouseEvent?
【发布时间】:2020-04-08 05:44:25
【问题描述】:

SwingUtilities 有一个很好的函数convertMouseEvent,可以将一个组件上的鼠标事件转换为另一个组件上的鼠标事件:

MouseEvent convertedEvent = SwingUtilities.convertMouseEvent(originalComponent, event, otherComponent);

同时,JavaFX 中的MouseEvent 有一个方法copyFor 可以为另一个组件创建MouseEvent 的副本:

MouseEvent convertedEvent = e.copyFor(e.getSource(), otherComponent);

我想做一些类似的事情来将 JavaFx MouseEvent e 转换为 Swing 鼠标事件。

我找不到烘焙函数,所以我尝试编写自己的函数。不过,有两个字段我无法轻松转换:

  • 标识事件的 ID 字段。我想我必须从e.getEventType().getEventType().getName() 手动转换
  • 在 JavaFX 中,没有指示事件发生时间的“when”属性。看来我可以在这里使用当前系统时间
  • 鼠标事件的修饰符。我不确定如何从 JavaFX 事件的属性中构建它们

有没有办法从e的属性中获取修饰符?

【问题讨论】:

    标签: java swing javafx mouseevent


    【解决方案1】:

    SwingEvents 中的函数很有用。可以通过导入访问它们

    import com.sun.javafx.embed.swing.SwingEvents;

    从 JavaFX 转换为 Swing:

    SwingEvents.fxMouseButtonToMouseButton(fxEvent):将 JavaFX 事件转换为 Swing 鼠标按钮。

    SwingEvents.fxMouseEventTypeToMouseID(fxEvent):将 JavaFX 事件转换为 Swing 鼠标 ID。

    SwingEvents.fxMouseModsToMouseMods(fxEvent):将 JavaFX 事件转换为 Swing 模块。

    从 Swing 转换为 JavaFX:

    SwingEvents.mouseIDToEmbedMouseType(swingEvent.getID()):将 Swing 鼠标事件 ID 转换为 JavaFX MouseType。

    SwingEvents.mouseButtonToEmbedMouseButton(swingEvent.getButton, swingEvent.getModifiersEx()):将 Swing 鼠标按钮转换为 JavaFX 鼠标按钮。当前存在漏洞 (JDK-8242419)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多