【问题标题】:what is the difference between stackpane and root in javafx?javafx中的stackpane和root有什么区别?
【发布时间】:2013-08-30 12:49:43
【问题描述】:

我正在练习 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;
}
}

【问题讨论】:

    标签: java javafx-2 javafx


    【解决方案1】:

    据官方documentation称,

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

    堆栈窗格将尝试调整大小每个子项以填充其 内容区。如果孩子无法调整大小以填充堆栈窗格 (要么是因为它不可调整大小,要么是因为它的最大尺寸阻止了它) 那么它将使用对齐方式在区域内对齐 属性,默认为Pos.CENTER

    虽然Group 类的官方documentation 声明

    Group 节点包含一个 ObservableList 子节点,这些子节点是 每当此节点渲染时,按顺序渲染。一个组将承担其子级的集体边界,而不是直接 可调整大小

    应用于组的任何变换、效果或状态都将应用于 该组的所有孩子。这样的变换和效果不会 包含在该组的布局范围内,但是如果转换和 效果直接设置在这个组的孩子身上,那些将是 包含在此组的布局范围内。

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

    【讨论】:

      【解决方案2】:

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

      如果您想将图表放置在应用程序客户区的特定位置,您会看到GroupStackPane 之间的区别。将图表放置在 x=10 和 y=10 将适用于 Group,但不适用于 StackPane

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-28
        • 1970-01-01
        • 2020-05-10
        • 2014-07-04
        相关资源
        最近更新 更多