Javafx 简明教程

JavaFX - Line Chart

折线图或折线图将信息显示为一系列通过直线段连接的数据点(标记)。折线图显示了数据如何以相等的时间频率变化。

下面是一个折线图,描述了不同年份的学校数量。

line chart

Line Chart in JavaFX

在 JavaFX 中,折线图由名为 LineChart 的类表示。此类属于 javafx.scene.chart 包。通过实例化此类,可以在 JavaFX 中创建一个 LineChart 节点。

要在 JavaFX 中生成折线图,应按照以下步骤操作。

Step 1: Defining the axis

在 Application 类的 start() 方法中定义折线图的 X 轴和 Y 轴,并为其设置标签。在我们的示例中,X 轴表示从 1960 年到 2020 年的年份,主要刻度标记每十年出现一次。

public class ClassName extends Application {
   @Override
   public void start(Stage primaryStage) throws Exception {
      //Defining X axis
      NumberAxis xAxis = new NumberAxis(1960, 2020, 10);
      xAxis.setLabel("Years");

      //Defining y axis
      NumberAxis yAxis = new NumberAxis(0, 350, 50);
      yAxis.setLabel("No.of schools");
   }
}

Step 2: Creating the Line Chart

通过实例化包 javafx.scene.chart 中名为 LineChart 的类创建一个折线图。向此类的构造函数传递在上一步骤中创建的表示 X 和 Y 轴的对象。

LineChart linechart = new LineChart(xAxis, yAxis);

Step 3: Preparing the Data

实例化 XYChart.Series 类。然后将数据(一系列 x 和 y 坐标)添加到此类的 Observable 列表中,如下所示 −

XYChart.Series series = new XYChart.Series();
series.setName("No of schools in an year");

series.getData().add(new XYChart.Data(1970, 15));
series.getData().add(new XYChart.Data(1980, 30));
series.getData().add(new XYChart.Data(1990, 60));
series.getData().add(new XYChart.Data(2000, 120));
series.getData().add(new XYChart.Data(2013, 240));
series.getData().add(new XYChart.Data(2014, 300));

Step 4: Add Data to the Line Chart

将上一步骤中准备的数据系列添加到折线图中,如下所示 −

//Setting the data to Line chart
linechart.getData().add(series);

Step 5: Creating a Group Object

start() 方法中,通过实例化名为 Group 的类创建组对象。这属于包 javafx.scene

将上一步骤中创建的 LineChart(节点)对象作为参数传递给 Group 类的构造函数。应该这样做以按照如下方式将其添加到组中 −

Group root = new Group(linechart);

Step 6: Launching Application

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

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

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

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

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

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

Example

下表描绘了从 1970 年到 2014 年区域内的学校数量。

Year

Number of Schools

1970

15

1980

30

1990

60

2000

120

2013

240

2014

300

下面是一个使用 JavaFX 生成折线图以描述上述数据的 Java 程序。

使用名称 LineChartExample.java 将此代码保存在文件中。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;

public class LineChartExample extends Application {
   @Override
   public void start(Stage stage) {
      //Defining the x axis
      NumberAxis xAxis = new NumberAxis(1960, 2020, 10);
      xAxis.setLabel("Years");

      //Defining the y axis
      NumberAxis yAxis = new NumberAxis   (0, 350, 50);
      yAxis.setLabel("No.of schools");

      //Creating the line chart
      LineChart linechart = new LineChart(xAxis, yAxis);

      //Prepare XYChart.Series objects by setting data
      XYChart.Series series = new XYChart.Series();
      series.setName("No of schools in an year");

      series.getData().add(new XYChart.Data(1970, 15));
      series.getData().add(new XYChart.Data(1980, 30));
      series.getData().add(new XYChart.Data(1990, 60));
      series.getData().add(new XYChart.Data(2000, 120));
      series.getData().add(new XYChart.Data(2013, 240));
      series.getData().add(new XYChart.Data(2014, 300));

      //Setting the data to Line chart
      linechart.getData().add(series);

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

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

      //Setting title to the Stage
      stage.setTitle("Line 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 LineChartExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls LineChartExample

在执行上述程序时,它将生成一个 JavaFX 窗口,显示折线图,如下所示。

line chart example

Example

下表说明了每个月售出的电子设备数量。

Item

每个月的销售数量

Laptop

176

TV

30

Mobile

540

Smart Watch

250

MacBook

60

在另一个示例中,使用 JavaFX 生成了描绘上述数据的折线图。使用名称 LineChartItems.java 将此代码保存在文件中。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.XYChart;

public class LineChartItems extends Application {
   @Override
   public void start(Stage stage) {
      //Defining the x axis
      CategoryAxis xAxis = new CategoryAxis();
      xAxis.setLabel("Items");

      //Defining the y axis
      NumberAxis yAxis = new NumberAxis();
      yAxis.setLabel("Sales (per month)");

      //Creating the line chart
      LineChart linechart = new LineChart(xAxis, yAxis);

      //Prepare XYChart.Series objects by setting data
      XYChart.Series series = new XYChart.Series();
      series.setName("Items sold per month");

      series.getData().add(new XYChart.Data("Laptop", 176));
      series.getData().add(new XYChart.Data("TV", 30));
      series.getData().add(new XYChart.Data("Mobile", 540));
      series.getData().add(new XYChart.Data("Smart Watch", 250));
      series.getData().add(new XYChart.Data("MacBook", 60));

      //Creating a scene object
      Scene scene = new Scene(linechart, 600, 400);
	  //Setting the data to Line chart
      linechart.getData().add(series);

      //Setting title to the Stage
      stage.setTitle("Line 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);
   }
}