我目前正在处理时间序列数据,并且正在使用 JFreeCharts XYLineChart 来显示我的数据。对于我的用户界面,我想创建这些图表的可点击缩略图(然后显示真正的大图表)。
我尝试了这种方法来创建图表的缩略图,但我不知道如何使用这个 BufferedImage 来显示缩略图。
XYSeriesCollection coll = new XYSeriesCollection();
coll.addSeries(rw.getT1().getCurMktCapSeries());
coll.addSeries(rw.getT2().getCurMktCapSeries());
JFreeChart chart = ChartFactory.createXYLineChart(rw.getT1().getName() + " - " + rw.getT2().getName(),
"Position",
"Course",
coll,
PlotOrientation.VERTICAL,
true,
true,
false);
BufferedImage bi = chart.createBufferedImage(1000, 1000, 100, 100, null);
我尝试在线搜索,但我发现的唯一内容是上面创建缩略图的方法,而不是如何显示它。
所以我的问题是:
- 这是创建缩略图的正确方法吗?
- 如何在我的 GUI 上显示此缩略图?
解决方案
我刚刚创建了自己的自定义 JPanel
public class ImagePanel extends JPanel
然后我添加了以下paintComponent方法来绘制缩略图
protected void paintComponent(Graphics g) {
super.paintComponents(g);
//Create Image
BufferedImage bi = this.createBufferedImage(this.rw);
//Draw Background
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(this.backgroundColor);
g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
//Draw Image
g2d.drawImage(bi.getScaledInstance(this.getWidth()-10, this.getHeight()-10, 0), 5, 5, this.backgroundColor, null);
}
要创建 BufferedImage 我使用了以下方法
private BufferedImage createBufferedImage(ResultWrapper rw2) {
//Create JFreeChart
XYSeriesCollection coll = new XYSeriesCollection();
coll.addSeries(rw.getT1().getCurMktCapSeries());
coll.addSeries(rw.getT2().getCurMktCapSeries());
JFreeChart chart = ChartFactory.createXYLineChart(null, null, null, coll, PlotOrientation.VERTICAL, false, true, false);
//Hide Axis
XYPlot plot = chart.getXYPlot();
plot.getRangeAxis().setVisible(false);
plot.getDomainAxis().setVisible(false);
return chart.createBufferedImage(500, 500, 100, 100, null);
}
有了这个,我得到了我想要的,一个 JFreeChart 的小缩略图。要使其可点击,只需添加一个 MouseListener。
感谢@MadProgrammer 使用自定义组件和paintComponent 方法