如何在不实际显示窗口的情况下创建/保存 JavaFX 饼图的图像?


JavaFX 的 **javafx.scene.chart** 包提供了创建各种图表(例如:折线图、面积图、条形图、饼图、气泡图、散点图等)的类。

要创建这些图表中的任何一个,您需要:

  • 实例化相应的类。

  • 设置所需的属性。

  • 创建一个布局/组对象来容纳图表。

  • 将布局/组对象添加到场景。

  • 通过调用 **show()** 方法显示场景。

这将在 JavaFX 窗口上显示所需的图表。

在不显示窗口的情况下保存图像

**Scene** 类的 **snapshot()** 方法会拍摄当前场景的快照,并将其作为 **WritableImage** 对象返回。

使用 **SwingFXUtils** 类的 **FromFXImage()** 方法,您可以从获得的 **WritableImage** 获取 **BufferedImage**,并将其写入本地所需的 **文件**,如下所示:

ImageIO.write(SwingFXUtils.fromFXImage(image, null), "PNG", file);

示例

import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.chart.PieChart;
import javafx.scene.image.WritableImage;
public class ChartsExample extends Application {
   public void start(Stage stage) throws IOException {
      //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);
      pieChart.setTitle("Mobile Sales");
      pieChart.setClockwise(true);
      pieChart.setLabelLineLength(50);
      pieChart.setLabelsVisible(true);
      pieChart.setStartAngle(180);
      //Creating a Group object
      Scene scene = new Scene(new Group(), 595, 400);
      stage.setTitle("Charts Example");
      ((Group) scene.getRoot()).getChildren().add(pieChart);
      //Saving the scene as image
      WritableImage image = scene.snapshot(null);
      File file = new File("D:\JavaFX\tempPieChart.png");
      ImageIO.write(SwingFXUtils.fromFXImage(image, null), "PNG", file);
      System.out.println("Image Saved");
   }
   public static void main(String args[]){
      launch(args);
   }
}

输出

如果您观察输出路径,您可以找到如下所示的保存图像:

更新于:2020年5月19日

1K+ 次浏览

开启您的 职业生涯

完成课程获得认证

开始学习
广告