我想使用以下代码使用jfreechart绘制一条简单的x,y曲线:
package temp;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import java.util.List;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
public class recorder extends JFrame {
int number=0;
public recorder(int number, List time, List values) {
this.number=number;
XYSeries series = new XYSeries(String.valueOf(number));
// The 4 following lines are slow
int n_value=time.size();
for (int i=0;i<n_value;i++){
series.add((double)time.get(i),(double)values.get(i));
}
// and that I would like to replace them by a "simple" assignement
XYSeriesCollection dataset = new XYSeriesCollection(series);
JFreeChart chart = ChartFactory.createXYLineChart("value","t","y",dataset,PlotOrientation.VERTICAL,true,true,false);
XYPlot plot = chart.getXYPlot();
StandardXYItemRenderer renderer = new StandardXYItemRenderer();
renderer.setSeriesPaint(0, Color.BLACK);
plot.setRenderer(renderer);
plot.setBackgroundPaint(Color.white);
plot.setRangeGridlinesVisible(false);
plot.setDomainGridlinesVisible(false);
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(600, 400));
chartPanel.setBackground(Color.white);
setContentPane(chartPanel);
pack();
setTitle("recorder"+String.valueOf(number));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
有没有人知道这样做的方法并摆脱循环和逐步的add()方法?在此先感谢您的帮助。
答案 0 :(得分:1)
创建extends AbstractXYDataset
的自定义类,如here所示,并为其提供接受java.util.List<E>
的构造函数或公共方法。然后,不是冗余地遍历列表,而是getX()
和getY()
的实现可以简单地返回所需的值。