在javafx中stackpane和root有什么区别?

时间:2013-08-30 12:49:43

标签: java javafx-2 javafx

我正在为javafx练习做饼图。以下是开发饼图的代码。如果我使用GroupStackPane,我发现输出没有区别。我已经评论了集团部分。只是在两者之间徘徊。

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 个答案:

答案 0 :(得分:5)

根据官方documentation

  

StackPane 以后向前的方式展示其子项。子项的z顺序由子项列表的顺序定义   第0个孩子是最底层,最后一个孩子在最顶层。如果是边境   和/或填充已经设定,孩子们将被安排在里面   那些插图。

     

堆叠窗格将尝试调整大小每个孩子填充它   内容区域。如果孩子的大小不能填充堆叠窗格   (或者因为它不可调整大小或者它的最大大小阻止它)   然后使用对齐方式在区域内对齐   property,默认为Pos.CENTER

虽然Group类的官方documentation说明

  

节点包含 ObservableList 的子项   每当此节点呈现时,呈现。一个集团将承担其子女的集体界限,而不是直接的   的可调整大小的

     

应用于组的任何转换,效果或状态都将应用于   该群体的所有孩子。这样的变换和效果不会   包含在此组的布局范围内,但是如果转换和   效果直接设定在本集团的子女身上   包含在本集团的布局范围内。

     

默认情况下,组会将其可管理的可调整大小的子项“自动调整”为   布局过程中他们的首选尺寸确保区域   和控件的大小正确,因为状态的变化。如果   应用程序需要禁用此自动调整大小的行为,然后它应该   将autoSizeChildren设置为false并了解如果是首选   孩子的大小发生变化,他们不会自动调整大小。

答案 1 :(得分:2)

StackPane是一个容器对象;它用于以特定方式布置节点(根据z顺序从前到后)。从功能上讲,StackPane是一个布局管理器。术语root或根节点指的是JavaFX应用程序的场景图中的最顶层节点。根节点传递给Scene的构造函数;它是唯一没有父级的节点。 Group也是一个容器。它不是布局管理器;它将孩子放在绝对坐标中。 StackPaneGroup可以是根节点。

如果您想将图表放在应用程序客户区的特定位置,您会发现GroupStackPane之间存在差异。在x = 10和y = 10处放置图表可以与Group一起使用,但不适用于StackPane