Javafx 简明教程

JavaFX - Pie Chart

饼图是以不同颜色的圆形切片表示值的图表。这些切片都有标签,每个切片对应的值都显示在图表中。

以下是显示各个公司某个时间点移动销量的饼图。

mobilesales pie chart

Pie Chart in JavaFX

在 JavaFX 中,饼图由名为 PieChart 的类表示。这个类属于 javafx.scene.chart 包。

通过实例化此类,可以在 JavaFX 中创建一个 PieChart 节点。

此类有 5 个属性,如下所示:

  1. clockwise − 这是一个布尔运算符;设置此运算符为 true 时,饼图中的数据切片将从饼图的起始角度开始按顺时针排列。

  2. data − 它表示一个 ObservableList 对象,其中包含饼图的数据。

  3. labelLineLength − 一个整型运算符,表示连接饼图标签和切片的线的长度。

  4. labelsVisible − 这是一个布尔运算符;设置此运算符为 true 时,将绘制饼图的标签。默认情况下,此运算符设置为 true。

  5. startAngle − 这是一个 double 类型的运算符,表示第一个饼图切片的起始角度。

要生成饼图,请准备一个 ObservableList 对象。在准备 ObservableList 对象后,将其作为参数传递给类 PieChart 的构造函数;或者,使用名为 setData() 的方法。

Steps to Generate Pie Chart

要在 JavaFX 中生成 PieChart ,请按照以下步骤操作。

Step 1: Creating a Class

创建一个 Java 类并继承包 javafx.applicationApplication 类,并按如下方式实现此类的 start() 方法。

public class ClassName extends Application {
   @Override
   public void start(Stage primaryStage) throws Exception {
   }
}

Step 2: Preparing the ObservableList Object

通过传递饼图数据准备接口 ObservableList 对象,如下所示:

ObservableList<PieChart.Data> pieChartData = FXCollections.observableArrayList(
   new PieChart.Data("Iphone 5S", 13),
   new PieChart.Data("Samsung Grand", 25),
   new PieChart.Data("MOTO G", 10),
   new PieChart.Data("Nokia Lumia", 22));

Step 3: Creating a PieChart Object

创建一个 PieChart ,方法是传递 ObservableList 对象,如下所示。

//Creating a Pie chart
PieChart pieChart = new PieChart(pieChartData);

Step 4: Setting the Title of the Pie Chart

使用类 PieChartsetTitle() 方法设置饼图的标题。它属于包 javafx.scene.chart

//Setting the title of the Pie chart
pieChart.setTitle("Mobile Sales");

Step 5: Setting the Slices Clockwise

顺时针设置饼图的切片。这是通过向类 PieChartsetClockwise() 方法传递布尔值 true 来完成的。它属于包 javafx.scene.chart

//setting the direction to arrange the data
pieChart.setClockwise(true);

Step 6: Set the Length of the Label Line

使用类 PieChartsetLabelLineLength() 方法设置标签线的长度,该类属于包 javafx.scene.chart ,如下所示:

//Setting the length of the label line
pieChart.setLabelLineLength(50);

Step 7: Set the Labels Visible

通过将布尔值 true 传递给类 PieChart 的方法 setLabelsVisible() 来设置饼形图的标签为可见。它属于包 javafx.scene.chart

//Setting the labels of the pie chart visible
pieChart.setLabelsVisible(true);

Step 8: Set the Start Angle of the Pie Chart

使用类 PieChartsetStartAngle() 方法设置饼形图的起始角度。它属于包 javafx.scene.chart

//Setting the start angle of the pie chart
pieChart.setStartAngle(180);

Step 9: Creating a Group Object

start() 方法中,通过实例化名为 Group 的类创建一个组对象。它属于包 javafx.scene 。将在上一步创建的 PieChart(节点)对象作为参数传递给 Group 类的构造函数。应按照以下方式进行此操作,以便将其添加到组中 −

Group root = new Group(piechart);

Step 10: Launching Application

最后,按照下面给出的步骤正确启动应用程序 −

  1. 首先,通过将组对象作为其构造函数的参数值传递来实例化名为 Scene 的类。你也可以将应用程序屏幕的尺寸作为可选参数传递给此构造函数。

  2. 然后,使用 Stage 类的 setTitle() 方法设置阶段标题。

  3. 现在,使用名为 Stage 的类的 setScene() 方法将 Scene 对象添加到阶段。

  4. 使用名为 show() 的方法显示场景的内容。

  5. 最后,借助 launch() 方法启动应用程序。

Example

下表描述了使用饼形图的移动式销售情况。下表列出了不同的移动品牌及其销售情况(每天的单位)。

S.No

Mobile Brands

Sales (Units per day)

1

Iphone 5S

20

2

Samsung Grand

20

3

MOTO G

40

4

Nokia Lumia

10

以下是 Java 程序,它使用 JavaFX 生成了一个饼形图,描述了上述数据。将此代码保存在名为 PieChartExample.java 的文件中。

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.chart.PieChart;

public class PieChartExample extends Application {
   @Override
   public void start(Stage stage) {
      //Preparing ObservbleList object
      ObservableList<PieChart.Data> pieChartData = FXCollections.observableArrayList(
         new PieChart.Data("Iphone 5S", 13),
         new PieChart.Data("Samsung Grand", 25),
         new PieChart.Data("MOTO G", 10),
         new PieChart.Data("Nokia Lumia", 22));

      //Creating a Pie chart
      PieChart pieChart = new PieChart(pieChartData);

      //Setting the title of the Pie chart
      pieChart.setTitle("Mobile Sales");

      //setting the direction to arrange the data
      pieChart.setClockwise(true);

      //Setting the length of the label line
      pieChart.setLabelLineLength(50);

      //Setting the labels of the pie chart visible
      pieChart.setLabelsVisible(true);

      //Setting the start angle of the pie chart
      pieChart.setStartAngle(180);

      //Creating a Group object
      Group root = new Group(pieChart);

      //Creating a scene object
      Scene scene = new Scene(root, 600, 400);

      //Setting title to the Stage
      stage.setTitle("Pie chart");

      //Adding scene to the stage
      stage.setScene(scene);

      //Displaying the contents of the stage
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

使用以下命令,从命令提示符编译并执行已保存的 java 文件。

javac --module-path %PATH_TO_FX% --add-modules javafx.controls PieChartExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls PieChartExample

在执行时,上述程序会生成一个 JavaFX 窗口,显示一个饼形图,如下所示。

pie chart

Example

我们来看另一个示例,绘制一个 JavaFX 饼形图,说明月薪为 25,000 印度卢比的私有员工的每月支出。将文件保存在名为 PieChartEmployee.java 的文件下。

S.No

Necessities

Expenses

1

Rent

7500

2

Groceries

1000

3

Transport

1500

4

Savings

10000

5

Miscellaneous

5000

 import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.chart.PieChart;

public class PieChartEmployee extends Application {
   @Override
   public void start(Stage stage) {
      //Preparing ObservbleList object
      ObservableList pieChartData = FXCollections.observableArrayList(
         new PieChart.Data("Rent", 7500),
         new PieChart.Data("Groceries", 1000),
         new PieChart.Data("Transport", 1500),
         new PieChart.Data("Savings", 10000),
		 new PieChart.Data("Miscellaneous", 5000));

      //Creating a Pie chart
      PieChart pieChart = new PieChart(pieChartData);

      //Setting the title of the Pie chart
      pieChart.setTitle("Monthly Expenses");

      //setting the direction to arrange the data
      pieChart.setClockwise(true);

      //Setting the length of the label line
      pieChart.setLabelLineLength(50);

      //Setting the labels of the pie chart visible
      pieChart.setLabelsVisible(true);

      //Setting the start angle of the pie chart
      pieChart.setStartAngle(180);

      //Creating a Group object
      Group root = new Group(pieChart);

      //Creating a scene object
      Scene scene = new Scene(root, 600, 400);

      //Setting title to the Stage
      stage.setTitle("Pie chart");

      //Adding scene to the stage
      stage.setScene(scene);

      //Displaying the contents of the stage
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

使用以下命令,从命令提示符编译并执行已保存的 java 文件。

javac --module-path %PATH_TO_FX% --add-modules javafx.controls PieChartEmployee.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls PieChartEmployee

在执行时,上述程序会生成一个 JavaFX 窗口,显示一个饼形图,如下所示。

piechart expenses