Swing & JavaFX:如何将 JavaFX MouseEvent 转换为 Swing MouseEvent?



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

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

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

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

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

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

  • 标识事件的Id字段。我想我将不得不从e.getEventType().getEventType().getName()手动转换
  • 在JavaFX中,没有"when"属性指示事件发生的时间。看来我可以在这里使用当前的系统时间
  • 鼠标事件的修饰符。我不知道如何从JavaFX事件的属性构建这些

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

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 mods.

要从Swing转换为JavaFX:

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

SwingEvents.mouseButtonToEmbedMouseButton(swingEvent.getButton, swingEvent.getModifiersEx()):将Swing鼠标按钮转换为JavaFX鼠标按钮。当前被窃听(JDK-8242419(。

最新更新