現在、時系列データを使用しており、JFreeChartsXYLineChartを使用してデータを表示しています。私のユーザーインターフェイスでは、これらのグラフのクリック可能なサムネイルを作成したいと思います(これにより、実際の大きなグラフが表示されます)。
この方法でチャートのサムネイルを作成しようとしましたが、この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を追加するだけです。
カスタムコンポーネントとpaintComponentメソッドを使用してくれた@MadProgrammerに感謝します