我在 Vaadin 中通过 JFreeChartWrapper 使用 jFreeChart 并且在绘制它时遇到问题。图表数据正在运行中,可能需要一些时间。所以我想添加进度指示器来通知用户图像加载(在它关闭窗口之前)。
我试图通过为 ProgressIndicator 添加临时布局并使用它直到从图表接收到一些事件来解决这个问题:
final AbsoluteLayout loadLayout = new AbsoluteLayout();
loadLayout.setImmediate(true);
ProgressIndicator progress = new ProgressIndicator();
progress.setIndeterminate(true);
progress.setVisible(true);
loadLayout.addComponent(progress, "right: 500px; top: 200px;");
setContent(loadLayout);
同时,图表被添加到另一个布局中:
JFreeChart barChart = ChartFactory.createBarChart("Text", "", "", res, PlotOrientation.VERTICAL, true, false, false);
barChart.addProgressListener(new ChartProgressListener() {
@Override
public void chartProgress(ChartProgressEvent arg0) {
if (arg0.getType() == ChartProgressEvent.DRAWING_FINISHED) {
loadLayout.setVisible(false);
setContent(layout);
layout.setVisible(true);
}
}
});
JFreeChartWrapper chartWrap = new JFreeChartWrapper(barChart);
layout.addComponent(chartWrap);
但我得到的 - 只是进度指示器,我从来没有得到 ChartProgressEvent。如果在 JFreeChart 中触发,我看不到这个事件的位置。
是否可以修复它或者我应该更好地使用其他 Vaadin 插件来制作图表?