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;
}
}
4

2 回答 2

5

根据官方文档

StackPane以从后到前的堆栈布局其子级。子项的 z 顺序由子项列表的顺序定义,第 0 个子项位于底部,最后一个子项位于顶部。如果设置了边框和/或填充,则子元素将被布置在这些插图中。

堆栈窗格将尝试调整每个子项的大小以填充其内容区域。如果子级无法调整大小以填充堆栈窗格(因为它无法调整大小或其最大大小阻止它),则它将使用对齐属性在区域内对齐,默认为 Pos.CENTER

虽然该课程的官方文档Group指出

一个Group节点包含一个ObservableList子 节点,每当这个节点被渲染时,这些子节点就会按顺序渲染。一个 Group 将承担其孩子的集体边界,并且不能直接 调整大小

应用于组的任何变换、效果或状态都将应用于该组的所有子项。此类变换和效果不会包含在此 Group 的布局边界中,但是如果直接在此 Group 的子级上设置变换和效果,则它们将包含在此 Group 的布局边界中。

默认情况下,组将在布局过程中将其托管的可调整大小的子项“自动调整大小”为首选大小,以确保区域和控件在其状态更改时正确调整大小。如果应用程序需要禁用这种自动调整大小的行为,那么它应该将 autoSizeChildren 设置为 false 并了解如果子项的首选大小发生变化,它们将不会自动调整大小。

于 2013-09-12T11:42:06.883 回答
2

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

如果您想将图表放置在应用程序客户区的特定位置,您会看到两者之间的差异GroupStackPane将图表放置在 x=10 和 y=10 可以使用Group但不能使用StackPane.

于 2015-06-07T09:42:24.093 回答