JavaFX条形图BarChart
JavaFX BarChart组件能够在JavaFX应用程序内绘制条形图。这在类似仪表板的应用程序中很有用。 JavaFX BarChart组件由类javafx.scene.chart.BarChart
表示。
条形图X轴和Y轴
JavaFX BarChart绘制条形图。条形图是二维图形,表示该图形具有X轴和Y轴。对于条形图,X轴通常是某种类别,Y轴是数字。
例如,想象一下一个条形图,该条形图说明了台式机,电话和平板电脑用户访问网站的次数。条形图将显示3条。 X轴上的类别为"桌面","电话"和"平板电脑"。 Y轴将显示X轴上每个类别的访问次数,因此Y轴是数字。
我们需要定义BarChart所使用的X轴和Y轴。分类轴由JavaFX类javafx.scene.chart.CategoryAxis
表示。数字轴由JavaFX类javafx.scene.chart.NumberAxis
表示。
这是创建JavaFXCategoryAxis
和NumberAxis
的示例:
CategoryAxis xAxis = new CategoryAxis(); xAxis.setLabel("Devices"); NumberAxis yAxis = new NumberAxis(); yAxis.setLabel("Visits");
创建条形图
要创建JavaFX BarChart组件,必须创建BarChart
类的实例。我们必须将X轴和Y轴实例传递给BarBart构造函数。这是一个JavaFXBarChart
实例化示例:
CategoryAxis xAxis = new CategoryAxis(); xAxis.setLabel("Devices"); NumberAxis yAxis = new NumberAxis(); yAxis.setLabel("Visits"); BarChart barChart = new BarChart(xAxis, yAxis);
可以在同一条形图中显示多个数据系列。我将在本" BarChart"教程中稍后展示如何执行此操作。
条形图数据系列
要使JavaFXBarChart
组件显示任何条形,必须为其提供数据系列。数据系列是数据点的列表。每个数据点包含一个X值和一个Y值。这是创建数据系列并将其添加到" BarChart"组件的示例:
XYChart.Series dataSeries1 = new XYChart.Series(); dataSeries1.setName("2014"); dataSeries1.getData().add(new XYChart.Data("Desktop", 178)); dataSeries1.getData().add(new XYChart.Data("Phone" , 65)); dataSeries1.getData().add(new XYChart.Data("Tablet" , 23)); barChart.getData().add(dataSeries1);
首先,创建一个XYChart.Series实例并命名。其次,将3个XYChart.Data实例添加到XYChart.Series对象。第三,将XYChart.Series对象添加到BarChart对象。
将BarChart添加到场景图
要使" BarChart"可见,必须将其添加到JavaFX场景图中。这意味着将BarChart
添加到Scene
对象中,或者将BarChart
对象添加到添加到Scene
对象中的布局组件。
这是向JavaFX场景图添加JavaFXBarChart
的示例:
package com.Hyman.javafx.charts; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.chart.BarChart; import javafx.scene.chart.CategoryAxis; import javafx.scene.chart.NumberAxis; import javafx.scene.chart.XYChart; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class BarChartExperiments extends Application { @Override public void start(Stage primaryStage) throws Exception { primaryStage.setTitle("BarChart Experiments"); CategoryAxis xAxis = new CategoryAxis(); xAxis.setLabel("Devices"); NumberAxis yAxis = new NumberAxis(); yAxis.setLabel("Visits"); BarChart barChart = new BarChart(xAxis, yAxis); XYChart.Series dataSeries1 = new XYChart.Series(); dataSeries1.setName("2014"); dataSeries1.getData().add(new XYChart.Data("Desktop", 567)); dataSeries1.getData().add(new XYChart.Data("Phone" , 65)); dataSeries1.getData().add(new XYChart.Data("Tablet" , 23)); barChart.getData().add(dataSeries1); VBox vbox = new VBox(barChart); Scene scene = new Scene(vbox, 400, 200); primaryStage.setScene(scene); primaryStage.setHeight(300); primaryStage.setWidth(1200); primaryStage.show(); } public static void main(String[] args) { Application.launch(args); } }
运行此代码示例产生的应用程序将类似于以下内容:
在同一个条形图中显示多个数据系列
如本教程前面所述,可以在同一BarChart组件中显示多个数据系列。我们只需在BarChart组件中添加多个数据序列即可。
当在同一" BarChart"中显示多个数据系列时,数据点将按其X值(类别)进行分类。因此,不同数据系列中具有相同X值的所有数据点将在条形图中彼此相邻显示。这首先是一个示例,该示例创建两个具有相同X值(类别)的数据点的数据系列:
XYChart.Series dataSeries1 = new XYChart.Series(); dataSeries1.setName("2014"); dataSeries1.getData().add(new XYChart.Data("Desktop", 567)); dataSeries1.getData().add(new XYChart.Data("Phone" , 65)); dataSeries1.getData().add(new XYChart.Data("Tablet" , 23)); barChart.getData().add(dataSeries1); XYChart.Series dataSeries2 = new XYChart.Series(); dataSeries2.setName("2014"); dataSeries2.getData().add(new XYChart.Data("Desktop", 540)); dataSeries2.getData().add(new XYChart.Data("Phone" , 120)); dataSeries2.getData().add(new XYChart.Data("Tablet" , 36)); barChart.getData().add(dataSeries2);
请注意,两个数据系列中的XYChart.Data实例如何对X使用相同的三个值("桌面","电话"和"平板电脑")。
这是一个完整的示例,显示了添加到BarChart并显示在场景图中的两个数据系列:
package com.Hyman.javafx.charts; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.chart.BarChart; import javafx.scene.chart.CategoryAxis; import javafx.scene.chart.NumberAxis; import javafx.scene.chart.XYChart; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class BarChartExperiments extends Application { @Override public void start(Stage primaryStage) throws Exception { primaryStage.setTitle("BarChart Experiments"); CategoryAxis xAxis = new CategoryAxis(); xAxis.setLabel("Devices"); NumberAxis yAxis = new NumberAxis(); yAxis.setLabel("Visits"); BarChart barChart = new BarChart(xAxis, yAxis); XYChart.Series dataSeries1 = new XYChart.Series(); dataSeries1.setName("2014"); dataSeries1.getData().add(new XYChart.Data("Desktop", 567)); dataSeries1.getData().add(new XYChart.Data("Phone" , 65)); dataSeries1.getData().add(new XYChart.Data("Tablet" , 23)); barChart.getData().add(dataSeries1); XYChart.Series dataSeries2 = new XYChart.Series(); dataSeries2.setName("2014"); dataSeries2.getData().add(new XYChart.Data("Desktop", 540)); dataSeries2.getData().add(new XYChart.Data("Phone" , 120)); dataSeries2.getData().add(new XYChart.Data("Tablet" , 36)); barChart.getData().add(dataSeries2); VBox vbox = new VBox(barChart); Scene scene = new Scene(vbox, 400, 200); primaryStage.setScene(scene); primaryStage.setHeight(300); primaryStage.setWidth(1200); primaryStage.show(); } public static void main(String[] args) { Application.launch(args); } }
运行此示例所产生的应用程序将类似于以下内容:
注意来自两个不同数据系列的数据是如何混合的。 X值为"桌面"的数据点彼此相邻显示,X值为"电话"和"平板电脑"的数据点也是如此。