我正在尝试在圆上创建一条线。
我尝试过的事情:
我将圆圈添加到 StackPane,然后将 StackPane 和线添加到我发送到场景构造函数的组中得到了一些不希望的结果,例如堆栈 Pane 没有在舞台上完全展开/p>
在圆圈后添加线会自动将其放在圆圈上方,但我需要对其进行更多控制。
例如,我有 10 个形状,我想声明所有形状,然后决定什么在什么之上,我不想担心按顺序添加它们
最佳答案
JavaFX 如何绘制
JavaFX 使用 Painter's algorithm , 绘画 children的 Parent按从头到尾的顺序绘制节点,以便最后的节点将绘制在第一个节点上。
这是在 retained mode 中完成的在每个 pulse而不是 immediate mode .因此,在您放弃对 JavaFX 图形系统的逻辑控制之前,不会绘制项目。这意味着您可以将项目添加到场景图中,然后在绘制它们之前根据需要在场景图中重新排序或移动它们。
JavaFX中的3D绘画也可以使用Z-buffering ,但此答案仅涉及具有相同 z 坐标值且没有 Z 缓冲的元素的 2D 绘制。
如何设置节点的绘制顺序
通过将节点添加到父节点的子列表中,您可以将节点放置在 Group 中。 parent 或 Pane parent 。节点将按照您将它们添加到子列表的顺序绘制。
如果你想使用 CSS,一个 Pane 就很好,否则一个 Group 通常就可以了。此外, Pane 具有可调整大小的范围,而组则没有。由于这些原因,我通常更喜欢使用 Pane 而不是组。
要更改子项的绘制顺序,您可以在子项列表中移动节点。
例如,以下代码将更改父 Pane 子列表中第一项和第五项的绘制顺序:
Collections.swap(parentPane.getChildren(), 0, 4)
此外,Node有toFront和 toBack将节点移动到节点的父节点列表的后面或前面的便捷方法。
有关布局 Pane 使用的建议
不要使用 StackPane 等布局 Pane 来保存您希望明确定位的节点。 StackPane 等托管布局 Pane 旨在根据布局 Pane 的内部算法自动为您处理节点布局。例如,默认情况下,您添加到 StackPane 的每个节点都将位于 StackPane 的中央。
相关
关于JavaFX如何将一个形状重叠到另一个上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45089396/