JavaFX如何将一个形状重叠到另一个上

标签 java javafx

我正在尝试在圆上创建一条线。

我尝试过的事情:

  • 我将圆圈添加到 StackPane,然后将 StackPane 和线添加到我发送到场景构造函数的组中得到了一些不希望的结果,例如堆栈 Pane 没有在舞台上完全展开/p>

  • 在圆圈后添加线会自动将其放在圆圈上方,但我需要对其进行更多控制。

例如,我有 10 个形状,我想声明所有形状,然后决定什么在什么之上,我不想担心按顺序添加它们

最佳答案

JavaFX 如何绘制

JavaFX 使用 Painter's algorithm , 绘画 childrenParent按从头到尾的顺序绘制节点,以便最后的节点将绘制在第一个节点上。

这是在 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)

此外,NodetoFronttoBack将节点移动到节点的父节点列表的后面或前面的便捷方法。

有关布局 Pane 使用的建议

不要使用 StackPane 等布局 Pane 来保存您希望明确定位的节点。 StackPane 等托管布局 Pane 旨在根据布局 Pane 的内部算法自动为您处理节点布局。例如,默认情况下,您添加到 StackPane 的每个节点都将位于 StackPane 的中央。

相关

关于JavaFX如何将一个形状重叠到另一个上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45089396/

相关文章:

java - 为什么我们在程序中使用java持久化而不是jdbc连接

java - 从模板直接访问 JavaBean 字段与 getter

java - 如何在 JavaFX 中创建 Sprite 运行周期?

java - 如何使 RadioButton 看起来像 JavaFX 中的常规 Button

java - 如何将双纬度和双经度设置到数组中

java - 在同一模块中使用时,IntelliJ 找不到生成的源

java - 如何从java中的拆分中计算子字符串的数量

javafx - 如何在JavaFX的MenuButton中创建子菜单?

java - 根据JavaFX和OSGI开发指导

单击按钮文本时 JavaFX 按钮出现错误