换句话说,我正在尝试用JavaFX做一些事情,就像蜡染允许你用Swing做的事情一样。
我希望能够在我的 JavaFX UI 中捕获任意节点的外观,就像 Node.snapshot() 一样,除了我需要像 SVG 这样的矢量格式的图像,而不是光栅图像。(将节点的光栅快照插入到SVG图像中是不够的,它需要是一个适当的,可缩放的矢量图像。
这是一个长期项目,所以我甚至愿意在JavaFX的保留模式API中实现我自己的GraphicsContext或任何等价物。
有人知道有没有办法做到这一点?我希望在JavaFX中实现的事情可能吗?
在JIRA JFX有一个公开的bug请求
https://javafx-jira.kenai.com/browse/RT-38559
(需要注册;您可以投票表决)。它目前说:
考虑未来的版本。
并且被标记为版本9。
有一个简单的JavaFX形状到SVG字符串的转换器,它将只转换基本形状而不应用css,而不是任意节点,但也许这就是你所需要的。
我开始编写一个JavaFx Node到SVG转换器,它从Gerrit Grunwald“扩展”ShapeConverter,它只转换Shape几何形状:
https://github.com/stefaneidelloth/JavaFxNodeToSvg
…在一定程度的挫败之后停止了。
请随时改进它,添加功能并修复错误。
转换器适用于简单节点示例,但适用于图表等高级示例。我失败的转换器可以作为起点。当前状态如下图所示。左侧显示原始JavaFx节点,右侧显示结果svg输出。
相应的svg文件可从以下网址获得:
https://github . com/stefaneidelloth/JavaFxNodeToSvg/tree/master/output
一些进一步的注意事项
除了上面图表示例中说明的定位问题之外,还必须考虑一些其他问题:
JavaFx 提供了比 SVG 标准元素更多的 css 功能。例如,(矩形)JavaFx 区域可以为每个四条边框线中的每条线提供单独的线条样式。这样的区域不能简单地转换为 SVG 矩形。相反,该区域的四条边界线需要单独划定。此外,这种边界线的每一端可以有两个单独的边半径:垂直半径和水平半径。为了将“四”边界线转换为相应的SVG线...可能有必要进一步拆分边界线:为四条边界线中的每条绘制两个圆角部分和一个直线部分。因此,在某些情况下,可能有 12 个 SVG 路径元素来绘制单个 JavaFx 区域的边框。此外,区域的背景填充可以具有与区域边界不同的半径。绘制区域的背景可能需要更多的 SVG 元素。因此,即使是“矩形区域”的转换也会变得非常复杂。
还请注意,JavaFx节点可能是动态的。例如,线条的不透明度在开始时为0,几毫秒后逐渐变为另一个值。
FadeTransition ft = new FadeTransition(Duration.millis(250), borderline);
ft.setToValue(0);
ft.play();
因此,只有转换禁用动画的节点或等到节点处于稳定状态才有意义。
如果有一天JavaFx图表的转换可以工作,我会非常高兴,这样我就可以在我的一个项目中使用带有SVG导出的JavaFx绘图。
我决定暂时停止转换器的开发,转而研究JavaScript库(d3)的绘图和SVG导出。如果这个策略变得更糟,我可能会回到JavaFxNodeToSvgConverter。
编辑使用d3.js绘图效果很好,我决定不使用JavaFx来创建绘图/ svg。https://github.com/stefaneidelloth/javafx-d3
我需要用SVG图像来设计节点的样式,但是无法正常工作。我正在使用< code>ImageNodeStyle并将一个SVG图像传递给构造函数。但是,对节点应用这种样式没有任何效果。我试着用位图图像,效果很好。 如何为节点样式启用SVG图像支持?
我正在使用bootstrap框架,试图使图像水平居中,但没有成功。。 我尝试过各种技术,例如将12个网格系统分成3个相等的块,例如 要获得相对于页面居中的图像,最简单的方法是什么?
我想对一个必须运行的程序使用numpy,并且我想在空闲的IDE中运行它。我已经从网上安装了numpy二进制文件,但是当我尝试运行“import numpy ”,然后在我的脚本中运行一些numpy命令时,python shell返回一个错误,说 我尝试过使用pip来安装麻木,但是当我在bash外壳中运行时,它说 我已经下载了Anaconda,我可以在其中使用numpy发行版,但是我真的想在空闲时使用
因此,我有一个从扩展而来的常规组件,我想将其添加到一些FXML代码中。我得到extends: 我试图把它包括成这样: FXML代码和类位于同一个包/目录中。 我可以像这样包括FXML文件,但我想包括一个类文件:
我已经用FXML创建了一个布局,它由一个带有sideMenu的BorderPane和一个用于其他内容的innerBorderPane组成... 但是,由于我刚刚开始使用JavaFX中的FXML,所以我只需要知道如何做下一件事... custom.FXML(这是主要的FXML布局) sideMenu.FXML(这是sideMenu FXML布局) java(这是sideMenu JavaFX控制器)
我很惊讶,节点的原始大小显然是在中控制的。我们有两个愚蠢的方法和仅此而已。 事件在哪里,可观察的属性在哪里,所有这些进步的东西在哪里?被遗忘了?欢迎视窗3.1应用编程接口? 我的印象是不是错了?请修理我。 如何绑定节点边界?如何同步调整一个节点的大小和另一个节点的大小?如何将一个节点放入另一个节点?如何使内部节点推送外部节点的大小? 如何将一些动作与节点调整大小联系起来?