包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(。