JavaFX 中窗格和组的区别?

Differences in Pane and Group in JavaFX?

假设您有一段代码:

Pane pane = new Pane();
pane.getChildren().add(circle);
pane.getChildren().add(rectangle);

Scene scene = new Scene(pane, 400, 400);

一定要写pane.getChildren().add(===);每次您想向窗格中添加内容?同样,只写有什么区别..

Pane pane = new Pane(circle, rectangle);

Scene scene = new Scene(pane, 400, 400);

正如我发现的那样,当我 运行 程序并显示形状时,它会做完全相同的事情。此外,使用 Pane 而不是:

在写作上有什么不同?
Group root = new Group(circle, rectangle);

Scene scene = new Scene(root, 400, 400);

如有任何帮助,我们将不胜感激!我一直在网上寻找,但似乎没有找到任何能真正回答我所有问题的东西。

两者之间没有任何区别:

Pane pane = new Pane(node1, node2);

并且:

Pane pane = new Pane();
pane.getChildren().add(node1);
pane.getChildren().add(node2);

两种方法都将节点添加到布局的子列表中。只是第一种方法是通过构造函数来完成的;它基本上是第二种方法的捷径。但是,只要您对布局有参考,就可以随时使用第二种方法。


以下是 PaneGroup 之间的一些差异,但我不能保证这是一个详尽的列表:

  1. A Group 在计算其布局边界时将考虑对其子项的任何变换或影响。这会对节点变换(或对其应用效果)时 UI 的行为方式产生深远影响。例如,当您旋转一个正方形时,其宽度和高度会随着时间的推移而增大和缩小。如果那个正方形在 Group 中,那么 Group 的宽度和高度将相应地增长和缩小; Pane 不会这样做。

  2. Group class 直接延伸自 ParentPane class 从 Region 延伸(并且 RegionParent 延伸)。这意味着 Group 具有 none 由 Region 提供的样式选项(例如背景、边框等)。

  3. Group 的 Javadoc 也说:

    Any transform, effect, or state applied to a Group will be applied to all children of that group.

    我从来没有真正尝试过这个,所以我不确定这是否真的不同于 Pane

此外,请记住,您通常希望使用 Pane,或者更具体地说,Pane 的子class。这包括 BorderPaneVBoxStackPane 等布局。这些布局会根据布局规则自动管理其子项以调整大小和定位它们。您可以使用嵌套布局来实现更复杂的设计。就个人而言,如果我想要上面第一点中提到的行为或者我正在使用 3D 形状,我真的只使用 Group