如何使用 JavaFX 创建流程窗格?
javafxobject oriented programmingprogramming更新于 2025/4/14 3:07:17
创建应用程序所需的所有节点后,您可以使用布局来排列它们。布局是计算给定空间中对象位置的过程。JavaFX 在 javafx.scene.layout 包中提供了各种布局。
流程窗格
在此布局中,节点在窗格的换行宽度/高度内一个接一个地按流程排列。您可以通过实例化 javafx.scene.layout.FlowPane 类在应用程序中创建流程窗格。
在实例化 FlowPane 类时,默认情况下,将创建一个水平流程窗格,您可以使用 setOrientation() 方法更改其方向。您可以使用 setPrefWrapLength() 方法将窗格中的节点包装在高度(垂直流窗格)或宽度(水平流窗格)内。
要将节点添加到此窗格,您可以将它们作为构造函数的参数传递,也可以将它们添加到窗格的可观察列表中,如下所示 −
getChildren().addAll();
示例
import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Scene; import javafx.scene.chart.AreaChart; import javafx.scene.chart.BarChart; import javafx.scene.chart.BubbleChart; import javafx.scene.chart.CategoryAxis; import javafx.stage.Stage; import javafx.scene.chart.NumberAxis; import javafx.scene.chart.PieChart; import javafx.scene.chart.XYChart; import javafx.scene.layout.FlowPane; public class FlowPaneExample extends Application { public void start(Stage stage) { //定义 X 轴和 Y 轴 CategoryAxis xAxis = new CategoryAxis(); NumberAxis yAxis = new NumberAxis(); xAxis.setLabel("Months"); yAxis.setLabel("Rainfall (mm)"); //创建面积图 AreaChart areaChart = new AreaChart(xAxis, yAxis); XYChart.Series series = new XYChart.Series(); series.getData().add(new XYChart.Data("July", 169.9)); series.getData().add(new XYChart.Data("Aug", 178.7)); series.getData().add(new XYChart.Data("Sep", 158.3)); series.getData().add(new XYChart.Data("Oct", 97.2)); series.getData().add(new XYChart.Data("Nov", 22.4)); series.getData().add(new XYChart.Data("Dec", 5.9)); series.setName("Rainfall In Hyderabad"); //将数据设置到面积图 areaChart.getData().addAll(series); areaChart.setPrefSize(290, 200); //定义轴 CategoryAxis xAxis1 = new CategoryAxis(); xAxis.setLabel("Year"); NumberAxis yAxis1 = new NumberAxis(); yAxis.setLabel("Population (In millions)"); //创建条形图 BarChart barchart = new BarChart(xAxis1, yAxis1); //通过设置数据准备 XYChart.Series 对象 XYChart.Series<String, Number> series1 = new XYChart.Series<>(); series1.setName("Asia"); series1.getData().add(new XYChart.Data<>("2012", 900)); series1.getData().add(new XYChart.Data<>("2013", 1000)); series1.getData().add(new XYChart.Data<>("2014", 1170)); series1.getData().add(new XYChart.Data<>("2015", 1250)); series1.getData().add(new XYChart.Data<>("2016", 1530)); series1.setName("Population of Asia"); //将数据设置为条形图 barchart.getData().addAll(series1); barchart.setPrefSize(290, 200); //创建饼图 PieChart pieChart = new PieChart(); ObservableList<PieChart.Data> data = FXCollections.observableArrayList( new PieChart.Data("Work", 10), new PieChart.Data("Chores", 2), new PieChart.Data("Sleep", 8), new PieChart.Data("Others", 4)); pieChart.setData(data); //设置其他属性 pieChart.setTitle("Activities"); pieChart.setLabelLineLength(10); pieChart.setPrefSize(290, 250); NumberAxis xAxis2 = new NumberAxis(0, 100, 10); NumberAxis yAxis2 = new NumberAxis(20, 100, 10); //为轴创建标签 xAxis.setLabel("Age"); yAxis.setLabel("Weight"); BubbleChart bubbleChart = new BubbleChart(xAxis2, yAxis2); XYChart.Series series2 = new XYChart.Series(); series2.getData().add(new XYChart.Data(10, 30, 4)); series2.getData().add(new XYChart.Data(25, 40, 5)); series2.getData().add(new XYChart.Data(40, 50, 6)); series2.getData().add(new XYChart.Data(55, 60, 8)); series2.getData().add(new XYChart.Data(70, 70, 9)); bubbleChart.getData().add(series2); series2.setName("work"); bubbleChart.setPrefSize(290, 250); //创建流程窗格 FlowPane pane = new FlowPane(); pane.getChildren().addAll(areaChart, barchart, pieChart, bubbleChart); //设置场景 Scene scene = new Scene(pane, 600, 450); stage.setTitle("Flow Pane"); stage.setScene(scene); stage.show(); } public static void main(String args[]){ launch(args); } }