2

我目前正在处理时间序列数据,并且正在使用 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 方法

4

2 回答 2

3

如何在我的 GUI 上显示此缩略图?

有很多方法,但考虑到用例,您可能会将其用作JButton/的图标JRadioButton或 a 的选项卡JTabbedPane,或用于 a JListor JComboBox

查看Swing 组件的视觉指南,快速了解各种可能性。

于 2012-08-09T14:46:23.810 回答
3

在 AndrewThompon 的建议之上,您可以提供一个能够绘制图表的自定义组件。

看一眼

这比已经建议的要复杂得多,但确实为您提供了最大的灵活性

于 2012-08-09T14:53:19.260 回答