JavaFX中StackPane和Root的区别是什么?

4

我正在练习使用JavaFX制作饼图。以下是开发饼图的代码。如果我使用GroupStackPane来制作,输出结果没有任何区别。我已经在代码中注释了使用Group的部分,只是好奇两者之间的区别。

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.chart.PieChart.Data;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class ChartApp1 extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
PieChart pieChart = new PieChart();
//Group p=new Group();

pieChart.setData(getChartData());
primaryStage.setTitle("PieChart");
StackPane root = new StackPane();
root.getChildren().add(pieChart);
//p.getChildren().add(pieChart);
primaryStage.setScene(new Scene(root, 400, 250));
primaryStage.show();
}
private ObservableList<PieChart.Data> getChartData() {
ObservableList<PieChart.Data> answer = FXCollections.observableArrayList();
answer.addAll(new PieChart.Data("java", 17.56),
new PieChart.Data("C", 17.06),
new PieChart.Data("C++", 8.25),
new PieChart.Data("C#", 8.20),
new PieChart.Data("ObjectiveC", 6.8),
new PieChart.Data("PHP", 6.0),
new PieChart.Data("(Visual)Basic", 4.76),
new PieChart.Data("Other", 31.37));
return answer;
}
}
2个回答

5
根据官方文档StackPane按照后到前的堆栈方式布置其子节点。子节点的Z顺序由子节点列表的顺序定义,其中第0个子节点在底部,最后一个子节点在顶部。如果设置了边框和/或填充,则子节点将在这些插图中进行布局。Stackpane将尝试调整每个子节点的大小以填充其内容区域。如果无法将子节点调整为填充Stackpane(因为它不可调整大小或其最大大小阻止了它),则将使用对齐属性在该区域内对齐它,该属性默认为Pos.CENTER。
Group类的官方文档则说明了,Group节点包含一个孩子ObservableList,每当此节点渲染时都会按顺序渲染。 Group将采用其子项的集体范围,并且不能直接调整大小。任何应用于Group的变换、效果或状态都将应用于该组的所有子项。这样的转换和效果将不包括在此组的布局边界中,但是如果直接在该组的子项上设置变换和效果,则这些变换和效果将包括在该组的布局边界中。默认情况下,Group将“自动调整大小”其管理的可调整大小的子项,以在布局传递期间确保区域和控件根据其状态正确调整大小。如果应用程序需要禁用此自动调整大小行为,则应将autoSizeChildren设置为false,并理解如果子项的首选大小更改,则它们不会自动调整大小。

2
StackPane是一个容器对象,用于按照z-order的顺序以特定方式布置节点。从功能上讲,StackPane是一个布局管理器。术语“根”或“根节点”指JavaFX应用程序场景图中最顶层的节点。根节点被传递到Scene的构造函数中;它是唯一没有父节点的节点。Group也是一个容器。它不是一个布局管理器;它将其子节点放置在绝对坐标中。StackPaneGroup都可以是根节点。
如果您想在应用程序的客户区域的特定位置放置图表,则会看到GroupStackPane之间的区别。在x = 10和y = 10处放置图表将使用Group工作,但不会使用StackPane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接