awt Graphics2D 和 JavaFX GraphicsContext 之间没有内置的互操作性,它们是完全独立的 API,用于完全独立的 UI 工具包。
推荐
是否需要修改或插入现有的 Swing 应用程序?
是 => java.awt.Graphics 接口的代码和(当嵌入 JavaFX 时)将您的 awt 渲染图形包装在 SwingNode 中,或使用如下定义的桥接器。
否 => 代码直接指向 JavaFX 图形上下文或 JavaFX 场景图。
在 JavaFX 中显示 Swing(和 AWT)
要在 JavaFX 中显示 Swing,您可以使用 SwingNode,它在 Java 8 early access release 中可用。
在 Swing 中显示 JavaFX
要在 Swing 中显示 JavaFX,您可以使用 JFXPanel。将您的 JavaFX 画布放入 JFXPanel。有关详细信息,请参阅 JavaFX for Swing Developers 教程。
桥接 AWT 和 JavaFX 图形
您可以实现bridge pattern 来开发抽象接口,然后委托给已配置的图形实现。我链接的 wiki 页面提供了一个很好的例子来说明如何做到这一点。我认为这种桥梁的实施将非常简单。例如,您可以实现 java.awt.Graphics 并将 api 调用映射到 JavaFX GraphicsContext 操作。桥接完成后,您只需对桥接接口进行编码,桥接就会根据您选择的实现将您的 api 调用转换为适当的 awt 或 javafx 方法的线程安全调用。
更新:2014 年 5 月 20 日
David Gilbert(JFreeChart 创建者)创建了一座桥梁。该项目是FXGraphics2D:
FXGraphics2D 是 Graphics2D API 的免费实现,
以 JavaFX 画布为目标。该代码已开发用于
Orson Charts 和
JFreeChart,但通常对使用 Graphics2D API 的任何代码都很有用。
FXGraphics2D 需要 JDK 1.8.0 或更高版本,并根据
(三条款)BSD 风格许可证的条款。
FXGraphics2D home page 和 github location。
线程建议
如果混合使用 JavaFX 和 Swing 代码,请注意管理线程的方式。两个工具包都是单线程的,并且两个工具包都在各自的线程上运行它们的处理,因此 JavaFX 代码必须在 JavaFX 线程上运行,而 Swing 代码必须在 Swing 线程上运行。
考虑 JavaFX 场景图
JavaFX 包括一个能够呈现2D shapes 的scene graph。考虑使用场景图而不是直接绘制画布。
未来的可能性
JavaFX 的未来版本可能会包含类似OpenGLNode 的内容,允许您直接渲染到 OpenGL 缓冲区。用于在此类节点上绘图的 API 可能与 JavaFX 画布 API 有很大不同(例如,它会使用类似 jogl 的东西)。
关于链接的示例文章的注释
您在问题中链接的文章与 JavaFX 1.x 有关。一般来说,完全忽略所有与 JavaFX 1.x 相关的旧文章,因为它已经完全过时了,这些文章中的任何信息都可能会让您感到非常困惑。
与 JavaFX 2+ 相关的文章是相关的,它们的最佳来源是 official Oracle JavaFX 2 documention。