加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Graphics2D和GraphicsContext之间的互操作性

发布时间:2020-12-14 05:30:00 所属栏目:Java 来源:网络整理
导读:我正在与一个正在寻找 Java中的图形渲染器的组合进行合作.目前我正在设法确定目标 java.awt.Graphics2D是否向前兼容.也就是说,其他图书馆,如JavaFX显示器是否可以从Graphics2D实例渲染? java.awt.Graphics2D和 javafx.scene.canvas.GraphicsContext之间是否
我正在与一个正在寻找 Java中的图形渲染器的组合进行合作.目前我正在设法确定目标 java.awt.Graphics2D是否向前兼容.也就是说,其他图书馆,如JavaFX显示器是否可以从Graphics2D实例渲染? java.awt.Graphics2D和 javafx.scene.canvas.GraphicsContext之间是否有互操作性?

或者,如果没有Graphics2D和GraphicsContext之间的直接,有没有办法在JavaFX应用程序中显示Graphics2D渲染,类似于Swing在Panel中显示Graphics2D渲染?

编辑:

如果不是这个问题,我对Java生态系统来说相当新鲜.对于更多的上下文,我在互联网搜索中发现的大多数事情是示例/教程,解释了如何在JavaFX(参见Example Article)中完成AWT中的工作,这不能解答我的问题,但是会导致我猜测那里没有互操作性.不过,我希望有更熟悉生态系统的人可以直接回答这个问题.

解决方法

awt Graphics2D和JavaFX GraphicsContext之间没有内置的互操作性,它们是完全独立的API,用于完全独立的UI工具包.

建议

是否有修改或插入现有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的未来版本很可能包括像OpenGLNode这样的内容,可以直接渲染到OpenGL缓冲区.用于绘制这样一个节点的API可能会显着不同于JavaFX画布API(例如,它将使用类似于jogl).

关于您链接的示例文章的注释

您在问题中链接的文章与JavaFX 1.x.一般来说,完全忽视与JavaFX 1.x相关的所有旧文章,因为它完全是过时的,并且这些文章中的任何信息都可能会让你大吃一惊.

与JavaFX 2相关的文章是相关的,最佳的来源是official Oracle JavaFX 2 documention.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读