【发布时间】:2012-04-02 20:04:28
【问题描述】:
在我的文凭中,我在SwingWorker 课程中有一些时间昂贵的计算。当SwingWorker 调用done 方法时。所有结果都应该放在图表上。关于结果 - 我不知道图例中有多少值。我做了这一切,但图表没有刷新。根本不显示系列。我尝试通过dataset.addSeries(someSeries) 和chart.getXYPlot().setDataset(someDataset)。在 DynamicDataDemo1.java 等示例项目中,它们只是向系列添加新点,而不是刷新/重绘图形。为什么图形不刷新?我有信息XYSeries 的add 方法向所有注册的听众发送SeriesChangeEvent 并自动刷新图表。但我不知道XYSeries 会有多少。无法理解如何通过 XYPlot 的setDataset 方法刷新图表。
public class OutputChart extends JPanel {
private JFreeChart chart;
private XYSeriesCollection dataset;
private ChartPanel chartPanel;
public OutputChart() {
dataset = createDataset();
chart = createChart(dataset);
chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 400));
add(chartPanel);
}
/**
* Creates a chart.
*
* @param dataset the data for the chart.
*
* @return a chart.
*/
private static JFreeChart createChart(XYDataset dataset) {
JFreeChart chart = ChartFactory.createXYLineChart(
"Результаты вычислений алгоритма",// chart title
"N", // x axis label
"V", // y axis label
dataset, // data
PlotOrientation.VERTICAL,
true, // include legend
true, // tooltips
false // urls
);
chart.setBackgroundPaint(Color.white);
XYPlot plot = chart.getXYPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(true);
XYLineAndShapeRenderer renderer
= (XYLineAndShapeRenderer) plot.getRenderer();
renderer.setShapesVisible(true);
renderer.setShapesFilled(true);
// change the auto tick unit selection to integer units only...
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
return chart;
}
/**
* Create data set for chart
* @return empty data set
*/
private XYSeriesCollection createDataset(){
return new XYSeriesCollection();
}
public void setDataset(XYSeries series){ //try through addSeries and setDataset of XYPlot.
dataset.addSeries(series);
}
public void setDataset(XYDataset dataset){ //try through addSeries and setDataset of XYPlot.
chart.getXYPlot().setDataset(dataset);
}
}
【问题讨论】:
标签: java jfreechart