英文:
Swing & JavaFX: how to convert JavaFX MouseEvent to Swing MouseEvent?
问题
`SwingUtilities`包中有一个很好的函数,`convertMouseEvent`,用于将组件上的鼠标事件转换为另一个组件上的鼠标事件:
```java
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
的属性中获取修饰符?
<details>
<summary>英文:</summary>
The package `SwingUtilities` has a nice function, `convertMouseEvent`, to convert a mouse event on a component to a mouse event on another component:
```java
MouseEvent convertedEvent = SwingUtilities.convertMouseEvent(originalComponent, event, otherComponent);
Meanwhile, the MouseEvent
in JavaFX has a method copyFor
to create a copy of the MouseEvent
for another component:
MouseEvent convertedEvent = e.copyFor(e.getSource(), otherComponent);
I would like to do something similar to convert a JavaFx MouseEvent e
to a Swing mouse event.
I couldn't find a baked in function, so I tried to write my own. There are two fields I can't readily convert though:
- Id field that identifies the event. I assume I'll have to manually convert from
e.getEventType().getEventType().getName()
- In JavaFX there is no "when" property indicating when the event occurred. It seems I could use the current system time here
- The modifier of the mouse event. I'm not sure how to build those from the properties of the JavaFX event
Is there a way to get the modifier from the properties of e
?
答案1
得分: 0
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)。
英文:
The functions in SwingEvents
can be useful. They can be accessed with the import
import com.sun.javafx.embed.swing.SwingEvents;
To convert from JavaFX to Swing:
SwingEvents.fxMouseButtonToMouseButton(fxEvent)
: converts a JavaFX event to a Swing mouse button.
SwingEvents.fxMouseEventTypeToMouseID(fxEvent)
: converts a JavaFX event to a Swing mouse ID.
SwingEvents.fxMouseModsToMouseMods(fxEvent)
: converts a JavaFX event to Swing mods.
To convert from Swing to JavaFX:
SwingEvents.mouseIDToEmbedMouseType(swingEvent.getID())
: converts a Swing mouse event ID to a JavaFX MouseType.
SwingEvents.mouseButtonToEmbedMouseButton(swingEvent.getButton, swingEvent.getModifiersEx())
: converts a Swing mouse button to a JavaFX mouse button. Currently bugged (JDK-8242419).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论