2012-08-09 74 views
2

我目前正在使用时间序列数据,而且我正在使用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

+0

* “这是创建缩略图的正确方法吗?”*它看起来不错吗?一张图片描绘了一千个单词,所以缩略图至少绘制了一段。请考虑每个问题询问一个问题。 – 2012-08-09 14:49:29

回答

3

根据AndrewThompon的建议,您可以提供具有绘制图表功能的自定义组件。

看看

这是目前为止更多地参与则已经被提出,但并为您提供最大的灵活性

+0

谢谢 我刚刚创建了自己的自定义JPanel,并在paintCompoment方法中绘制了BufferedImage。 工程就像一个魅力。 – Sturmi12 2012-08-09 15:22:56

3

如何显示在我的GUI这个缩略图?

有多种方式,但考虑到用例,你可能看使用它作为一个JButton/JRadioButton的图标或JTabbedPane的标签,或在JListJComboBox

查看A Visual Guide to Swing Components以了解可能性的快速浏览。

+0

或JLabel以及;) – MadProgrammer 2012-08-09 14:48:30

+0

@Mad我很高兴你添加了一个;)或者我可能不得不鼓励你提出一个默认情况下不可聚焦的组件,当有许多其他可能性时可聚焦的,但也有直接挂钩事件检测。我打算将JTree添加到原始列表中,但认为它扩展了'适合用例'的范围,但是'JLabel'?哈克.. ptui ..;) – 2012-08-09 14:55:46

+0

这个问题是有点fuage在那个方向。 :J拉贝尔是第一个想到的,但公平点关于可调焦的 – MadProgrammer 2012-08-09 14:59:46