JavaFX - 条形图

  • 简述

    条形图用于使用矩形条来表示分组数据。这些条的长度描述了这些值。条形图中的条可以垂直或水平绘制。
    以下是条形图,比较了各种汽车品牌。
    柱状图
    在 JavaFX 中,条形图由一个名为的类表示 BarChart. 这个类属于包javafx.scene.chart. 通过实例化此类,您可以在 JavaFX 中创建一个 BarChart 节点。
  • 生成条形图的步骤

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

    第 1 步:创建一个类

    创建一个Java类并继承 Application 包的类别 javafx.application. 然后你可以实现start() 这个类的方法如下。
    
    public class ClassName extends Application {  
       @Override     
       public void start(Stage primaryStage) throws Exception {      
       }    
    }
    

    步骤 2:定义轴

    定义条形图的 X 和 Y 轴并为其设置标签。在我们的例子中,X 轴代表比较的类别,y 轴代表分数。
    
    //Defining the x axis               
    CategoryAxis xAxis = new CategoryAxis();   
            
    xAxis.setCategories(FXCollections.<String>observableArrayList(Arrays.asList(
       "Speed", "User rating", "Milage", "Safety"))); 
    xAxis.setLabel("category");  
    //Defining the y axis 
    NumberAxis yAxis = new NumberAxis(); 
    yAxis.setLabel("score");
    

    第 3 步:创建条形图

    通过实例化名为的类来创建折线图 BarChart 包裹的 javafx.scene.chart. 向该类的构造函数传递上一步创建的表示 X 轴和 Y 轴的对象。
    
    //Creating the Bar chart 
    BarChart<String, Number> barChart = new BarChart<>(xAxis, yAxis);  
    barChart.setTitle("Comparison between various cars"); 
    

    第 4 步:准备数据

    实例化 XYChart.Series 类并将数据(一系列 x 和 y 坐标)添加到此类的 Observable 列表中,如下所示 -
    
    //Prepare XYChart.Series objects by setting data        
    XYChart.Series<String, Number> series1 = new XYChart.Series<>(); 
    series1.setName("Fiat"); 
    series1.getData().add(new XYChart.Data<>("Speed", 1.0)); 
    series1.getData().add(new XYChart.Data<>("User rating", 3.0)); 
    series1.getData().add(new XYChart.Data<>("Milage", 5.0)); 
    series1.getData().add(new XYChart.Data<>("Safety", 5.0));   
    XYChart.Series<String, Number> series2 = new XYChart.Series<>(); 
    series2.setName("Audi"); 
    series2.getData().add(new XYChart.Data<>("Speed", 5.0)); 
    series2.getData().add(new XYChart.Data<>("User rating", 6.0));  
    series2.getData().add(new XYChart.Data<>("Milage", 10.0)); 
    series2.getData().add(new XYChart.Data<>("Safety", 4.0));  
    XYChart.Series<String, Number> series3 = new XYChart.Series<>(); 
    series3.setName("Ford"); 
    series3.getData().add(new XYChart.Data<>("Speed", 4.0)); 
    series3.getData().add(new XYChart.Data<>("User rating", 2.0)); 
    series3.getData().add(new XYChart.Data<>("Milage", 3.0)); 
    series3.getData().add(new XYChart.Data<>("Safety", 6.0));
    

    步骤 5:将数据添加到条形图

    将上一步中准备的数据系列添加到条形图中,如下所示 -
    
    //Setting the data to bar chart        
    barChart.getData().addAll(series1, series2, series3);
    

    步骤 6:创建组对象

    在里面 start()方法,通过实例化名为 Group 的类来创建一个组对象。这个属于包javafx.scene.
    将在上一步中创建的 BarChart(节点)对象作为参数传递给 Group 类的构造函数。这样做是为了将其添加到组中,如下所示 -
    
    Group root = new Group(barChart);
    

    步骤 7:创建场景对象

    通过实例化名为的类来创建场景 Scene,属于包 javafx.scene. 向这个类传递 Group 对象 (root) 在上一步中创建。
    除了根对象,你还可以传递两个表示屏幕高度和宽度的双参数,以及 Group 类的对象,如下所示。
    
    Scene scene = new Scene(group ,600, 300);
    

    第八步:设置舞台标题

    您可以使用 setTitle() 的方法 Stage班级。这primaryStage 是一个Stage对象,作为参数传递给场景类的start方法。
    使用 primaryStage 对象,将场景的标题设置为 Sample Application 如下。
    
    primaryStage.setTitle("Sample Application");
    

    第 9 步:将场景添加到舞台

    您可以使用方法将 Scene 对象添加到舞台 setScene() 类名为 Stage. 使用以下方法添加在前面步骤中准备的 Scene 对象。
    
    primaryStage.setScene(scene);
    

    第 10 步:显示舞台内容

    使用名为的方法显示场景的内容 show()Stage 类如下。
    
    primaryStage.show();
    

    第 11 步:启动应用程序

    通过调用静态方法启动 JavaFX 应用程序 launch()Application 类从主要方法如下。
    
    public static void main(String args[]){   
       launch(args);      
    }
    

    例子

    以下示例借助条形图描述了各种汽车统计数据。以下是汽车品牌及其不同特征的列表,我们将使用条形图显示 -
    速度 用户评分 千里 安全
    菲亚特 1.0 3.0 5.0 5.0
    奥迪 5.0 6.0 10.0 4.0
    福特 4.0 2.0 3.0 6.0
    以下是生成条形图的 Java 程序,使用 JavaFX 描述上述数据。
    将此代码保存在名称为的文件中 BarChartExample.java.
    
    import java.util.Arrays;
    import javafx.application.Application;
    import javafx.collections.FXCollections;
    import javafx.scene.Group;
    import javafx.scene.Scene;
    import javafx.scene.chart.BarChart;
    import javafx.scene.chart.CategoryAxis;
    import javafx.stage.Stage;
    import javafx.scene.chart.NumberAxis;
    import javafx.scene.chart.XYChart;
            
    public class BarChartExample extends Application {
       @Override
       public void start(Stage stage) {    
          //Defining the axes              
          CategoryAxis xAxis = new CategoryAxis();  
          xAxis.setCategories(FXCollections.<String>
          observableArrayList(Arrays.asList("Speed", "User rating", "Milage", "Safety")));
          xAxis.setLabel("category");
           
          NumberAxis yAxis = new NumberAxis();
          yAxis.setLabel("score");
         
          //Creating the Bar chart
          BarChart<String, Number> barChart = new BarChart<>(xAxis, yAxis); 
          barChart.setTitle("Comparison between various cars");
            
          //Prepare XYChart.Series objects by setting data       
          XYChart.Series<String, Number> series1 = new XYChart.Series<>();
          series1.setName("Fiat");
          series1.getData().add(new XYChart.Data<>("Speed", 1.0));
          series1.getData().add(new XYChart.Data<>("User rating", 3.0));
          series1.getData().add(new XYChart.Data<>("Milage", 5.0));
          series1.getData().add(new XYChart.Data<>("Safety", 5.0));
            
          XYChart.Series<String, Number> series2 = new XYChart.Series<>();
          series2.setName("Audi");
          series2.getData().add(new XYChart.Data<>("Speed", 5.0));
          series2.getData().add(new XYChart.Data<>("User rating", 6.0));
          series2.getData().add(new XYChart.Data<>("Milage", 10.0));
          series2.getData().add(new XYChart.Data<>("Safety", 4.0));
          XYChart.Series<String, Number> series3 = new XYChart.Series<>();
          series3.setName("Ford");
          series3.getData().add(new XYChart.Data<>("Speed", 4.0));
          series3.getData().add(new XYChart.Data<>("User rating", 2.0));
          series3.getData().add(new XYChart.Data<>("Milage", 3.0));
          series3.getData().add(new XYChart.Data<>("Safety", 6.0));
                  
          //Setting the data to bar chart       
          barChart.getData().addAll(series1, series2, series3);
            
          //Creating a Group object 
          Group root = new Group(barChart);
            
          //Creating a scene object
          Scene scene = new Scene(root, 600, 400);
          //Setting title to the Stage
          stage.setTitle("Bar 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 BarChartExample.java 
    java BarChartExample
    
    执行时,上述程序会生成一个 JavaFX 窗口,显示如下所示的面积图。
    条形图示例