2023-02-17 408
我制作了一个非常简短的应用程序,该应用程序使用Javafx生成图表. App显示正确的值(图表),但是当我进行快照时,图像仅显示一个轴和标签,但不显示系列和值.
stage.setTitle("Line Chart Sample");
final DateAxis xAxis = new DateAxis();
final NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("Number of Month");
yAxis.setLabel("Count");
final LineChart<Date, Number> lineChart = new LineChart<>(xAxis,yAxis);
Scene scene = new Scene(lineChart,1000,700);
lineChart.setTitle("Stock Monitoring, 2010");
XYChart.Series series = new XYChart.Series();
series.setName("My portfolio");
series.getData().add(new XYChart.Data(new GregorianCalendar(2012, 11, 15).getTime(), 23));
series.getData().add(new XYChart.Data(new GregorianCalendar(2012, 11, 16).getTime(), 14));
series.getData().add(new XYChart.Data(new GregorianCalendar(2012, 11, 17).getTime(), 15));
series.getData().add(new XYChart.Data(new GregorianCalendar(2012, 11, 18).getTime(), 24));
series.getData().add(new XYChart.Data(new GregorianCalendar(2012, 11, 19).getTime(), 34));
series.getData().add(new XYChart.Data(new GregorianCalendar(2012, 11, 20).getTime(), 36));
series.getData().add(new XYChart.Data(new GregorianCalendar(2012, 11, 21).getTime(), 22));
lineChart.getData().add(series);
stage.setScene(scene);
stage.show();
WritableImage img = new WritableImage(1000, 700);
File file = new File("saved.png");
scene.snapshot(img);
RenderedImage renderedImage = SwingFXUtils.fromFXImage(img, null);
ImageIO.write(renderedImage,"png", file);
这是一个保存的文件
这是App
的屏幕截图
我不知道我在做什么错.
默认情况下,图表为动画.快照发生在(简短)动画完成之前,因此数据不会出现.致电
lineChart.setAnimated(false);
强制CSS的布局和应用也可能是明智的(这确定了如何绘制数据的线和节点).通常,这些仅在第一个场景渲染中完成,因此您的快照可能在发生之前发生.您需要通过致电
来执行此操作
lineChart.applyCss();
lineChart.layout();
将图表添加到场景之后,然后将数据添加到图表之后.
.
这是一个SSCCE:
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.image.WritableImage;
import javafx.stage.Stage;
public class SnapshotChart extends Application {
@Override
public void start(Stage stage) throws IOException {
stage.setTitle("Line Chart Sample");
final NumberAxis xAxis = new NumberAxis();
final NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("Number of Month");
yAxis.setLabel("Count");
final LineChart<Number, Number> lineChart = new LineChart<>(xAxis,yAxis);
lineChart.setAnimated(false);
Scene scene = new Scene(lineChart,1000,700);
lineChart.setTitle("Stock Monitoring, 2010");
XYChart.Series<Number, Number> series = new XYChart.Series<>();
series.setName("My portfolio");
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));
series.getData().add(new XYChart.Data<>(6, 36));
series.getData().add(new XYChart.Data<>(7, 22));
lineChart.getData().add(series);
lineChart.applyCss();
lineChart.layout();
stage.setScene(scene);
stage.show();
WritableImage img = new WritableImage(1000, 700);
File file = new File("saved.png");
scene.snapshot(img);
RenderedImage renderedImage = SwingFXUtils.fromFXImage(img, null);
ImageIO.write(renderedImage,"png", file);
}
public static void main(String[] args) {
launch(args);
}
}
以上所述是小编给大家介绍的场景的javafx-snapshot没有显示值和序列,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/34203.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态