或者,如果没有Graphics2D和GraphicsContext之间的直接,有没有办法在JavaFX应用程序中显示Graphics2D渲染,类似于Swing在Panel中显示Graphics2D渲染?
编辑:
如果不是这个问题,我对Java生态系统来说相当新鲜.对于更多的上下文,我在互联网搜索中发现的大多数事情是示例/教程,解释了如何在JavaFX(参见Example Article)中完成AWT中的工作,这不能解答我的问题,但是会导致我猜测那里没有互操作性.不过,我希望有更熟悉生态系统的人可以直接回答这个问题.
解决方法
建议
是否有修改或插入现有Swing应用程序的要求?
是=>代码到java.awt.Graphics接口和(嵌入在JavaFX中)将您的awt渲染图形包装在SwingNode中,或者使用如下定义的网桥.
否=>代码直接指向JavaFX图形上下文或JavaFX场景图.
在JavaFX中显示Swing(和AWT)
要在JavaFX中显示Swing,可以使用Java 8 early access release中的SwingNode.
在Swing中显示JavaFX
要在Swing中显示JavaFX,可以使用JFXPanel.将JavaFX画布放入JFXPanel.有关更多信息,请参阅JavaFX for Swing Developers教程.
连接AWT和JavaFX图形
您可以实现bridge pattern开发抽象界面,然后委派给已配置的Graphics实现.我链接的wiki页面提供了一个很好的例子,说明如何做到这一点.我认为这样一个桥梁的实施是相当直截了当的.例如,您可以实现java.awt.Graphics并将api调用映射到JavaFX GraphicsContext操作.一旦你的桥接完成,你只需要编写桥接口,桥就可以根据你选择的实现,将你的api调用转换成线程安全的awt或javafx方法调用.
更新日:2014年5月20日
大卫吉尔伯特(JFreeChart创建者)创建了一座桥梁.该项目是FXGraphics2D:
FXGraphics2D is a free implementation of the Graphics2D API that
targets the JavaFX Canvas. The code has been developed for the use of
070010 and
070011,but will be generally useful for any code that uses the Graphics2D API.FXGraphics2D requires JDK 1.8.0 or later and is licensed under the
terms of a (three clause) BSD-style license.
FXGraphics2D home page和github location.
线程建议
如果要混合JavaFX和Swing代码,请注意如何管理线程.两个工具包都是单线程的,两个工具包都在自己的线程上运行它们的处理,所以JavaFX代码必须在JavaFX线程上运行,并且Swing代码必须在Swing线程上运行.
考虑JavaFX SceneGraph
JavaFX包括一个能够呈现2D shapes的scene graph.考虑使用场景图而不是直接绘制画布.
未来的可能性
JavaFX的未来版本很可能包括像@L_301_19@这样的内容,可以直接渲染到OpenGL缓冲区.用于绘制这样一个节点的API可能会显着不同于JavaFX画布API(例如,它将使用类似于jogl).
您在问题中链接的文章与JavaFX 1.x.一般来说,完全忽视与JavaFX 1.x相关的所有旧文章,因为它完全是过时的,并且这些文章中的任何信息都可能会让你大吃一惊.
与JavaFX 2相关的文章是相关的,最佳的来源是official Oracle JavaFX 2 documention.