我必须生成用于导出的折线图(另存为 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/