java - 如何使用 JavaFX 图表 API 生成图表图像以进行导出而无需先显示

标签 java charts javafx javafx-2 javafx-8

我必须生成用于导出的折线图(另存为 png)而不显示图表。我使用了 JavaFX 网站上的现有示例。这是正确的方法吗?

这里是用于生成png图像的示例程序,

 public class FxChartDemo extends Application {
        public static void main(String[] args) {
            launch(args);
        }
        @Override
        public void start(Stage stage) throws Exception {
            stage.setTitle("Line Chart Sample");
            //defining the axes
            final NumberAxis xAxis = new NumberAxis();
            final NumberAxis yAxis = new NumberAxis();
            xAxis.setLabel("Number of Month");
            xAxis.setLabel("Number of Month");
            //creating the chart
            LineChart<Number, Number> lineChart =
                    new LineChart<Number, Number>(xAxis, yAxis);
            lineChart.setTitle("Stock Monitoring, 2010");
            //defining a series
            XYChart.Series series = new XYChart.Series();
            series.setName("My portfolio");
            //populating the series with data
            series.getData().add(new XYChart.Data(1, 23));
            series.getData().add(new XYChart.Data(2, 14));
            series.getData().add(new XYChart.Data(3, 15));
            series.getData().add(new XYChart.Data(4, 24));
            series.getData().add(new XYChart.Data(5, 34));
            Scene scene = new Scene(lineChart, 800, 600);
            lineChart.setAnimated(false);
            lineChart.getData().add(series);
            saveAsPng(lineChart, "c:\\temp\\chart.png");
            stage.setScene(scene);
            saveAsPng(lineChart, "c:\\temp\\chart1.png");
            //stage.show();
            System.out.println("After show");
        }
        public void saveAsPng(LineChart lineChart, String path) {
            WritableImage image = lineChart.snapshot(new SnapshotParameters(), null);
            File file = new File(path);
            try {
                ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png", file);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

最佳答案

不,这不起作用。您应该尝试更改此代码:

        ......
        saveAsPng(lineChart, "c:\\temp\\chart.png");
        stage.setScene(scene);
        saveAsPng(lineChart, "c:\\temp\\chart1.png");
        //stage.show();
        System.out.println("After show");
    }
    public void saveAsPng(LineChart lineChart, String path) {
        WritableImage image = lineChart.snapshot(new SnapshotParameters(), null);
        ......

至:

    ......
    saveAsPng(scene, "c:\\temp\\chart.png");
    stage.setScene(scene);
    saveAsPng(scene, "c:\\temp\\chart1.png");
    //stage.show();
    System.out.println("After show");
}
public void saveAsPng(Scene scene, String path) {
    WritableImage image = scene.snapshot(null);
    ......

非常适合我。

关于java - 如何使用 JavaFX 图表 API 生成图表图像以进行导出而无需先显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29721289/

相关文章:

java - 在java中加载图像

java - tomcat把web应用使用的txt文件存放在哪里

javascript - 在angular-chart.js的饼图中显示数据标签

animation - 如何在javaFX中使用KeyPress事件获得流畅的动画?

java - ListView 单元格上的 setOnMouseEntered/Exited

java - 使用 MySQL 在 Hibernate Java 中获取两个日期之间的数据?

java.lang.ClassNotFoundException : javax. persistence.NamedStoredProcedureQuery - hibernate 错误

image-processing - 绘图数字化-从图形图像中抓取样本值

ios - X 轴值被重复而不是替换 iOS 图表

java - 如何跟踪鼠标在桌面上的点击