我目前正在使用时间序列数据,而且我正在使用JFreeCharts XYLineChart来显示我的数据。对于我的用户界面,我想创建这些图表的可点击缩略图(然后显示真正的大图)。在JPanel上显示JFreeChart的缩略图
我试过这种方法来创建图表的缩略图,但我不知道如何使用这个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
* “这是创建缩略图的正确方法吗?”*它看起来不错吗?一张图片描绘了一千个单词,所以缩略图至少绘制了一段。请考虑每个问题询问一个问题。 – 2012-08-09 14:49:29