jfreechart动态折线图
时间: 2023-06-01 20:03:47 浏览: 159
JFreeChart是一个Java类库,用于创建各种类型的图表,包括折线图,柱状图,饼图等等。在JFreeChart中,创建动态折线图可以通过以下步骤完成:
1. 导入JFreeChart类库。
2. 创建一个XYSeries对象,用于存储折线图的数据。
3. 创建一个XYSeriesCollection对象,用于管理XYSeries对象并将其添加到折线图中。
4. 创建一个ChartPanel对象,用于显示折线图。
5. 创建一个JFreeChart对象,用于设置折线图的标题、坐标轴等属性。
6. 使用ScheduledExecutorService定时更新折线图的数据。
下面是一个示例代码,演示如何创建一个简单的动态折线图:
```
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.util.Random;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
public class DynamicLineChart extends JFrame {
private static final long serialVersionUID = 1L;
private TimeSeries series;
private ScheduledExecutorService executor;
public DynamicLineChart() {
super("Dynamic Line Chart");
setDefaultCloseOperation(EXIT_ON_CLOSE);
// create dataset
TimeSeriesCollection dataset = new TimeSeriesCollection();
series = new TimeSeries("Random Data");
dataset.addSeries(series);
// create chart
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"Dynamic Line Chart",
"Time",
"Value",
dataset,
true,
true,
false
);
// customize chart
XYPlot plot = chart.getXYPlot();
plot.setBackgroundPaint(Color.WHITE);
plot.setDomainGridlinePaint(Color.BLACK);
plot.setRangeGridlinePaint(Color.BLACK);
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setAutoRange(true);
// create chart panel
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(640, 480));
add(chartPanel, BorderLayout.CENTER);
// create executor to update chart data
executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(this::updateData, 0, 50, TimeUnit.MILLISECONDS);
}
private void updateData() {
double value = Math.random() * 100;
series.add(new Millisecond(), value);
}
public static void main(String[] args) {
DynamicLineChart chart = new DynamicLineChart();
chart.pack();
chart.setVisible(true);
}
}
```
在上面的代码中,我们创建了一个继承自JFrame的DynamicLineChart类,并在其构造函数中完成了以下操作:
1. 创建一个TimeSeries对象,用于存储折线图的数据。
2. 创建一个TimeSeriesCollection对象,用于管理TimeSeries对象并将其添加到折线图中。
3. 创建一个JFreeChart对象,用于设置折线图的标题、坐标轴等属性。
4. 创建一个ChartPanel对象,用于显示折线图。
5. 使用ScheduledExecutorService定时更新折线图的数据。
在updateData()方法中,我们生成随机数据并将其添加到TimeSeries对象中。通过ScheduledExecutorService定时调用updateData()方法,我们可以实现动态更新折线图的效果。
最后,在main()方法中,我们创建一个DynamicLineChart对象,并设置其可见性。运行程序后,我们可以看到生成的动态折线图。
阅读全文