如何使用JavaFX图表API生成图表图像以便先导出而不显示

时间:2015-04-18 18:37:44

标签: 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();
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

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

        ......
        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);
    ......

非常适合我。