2

現在、時系列データを使用しており、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に感謝します

4

2 に答える 2

3

このサムネイルをGUIに表示するにはどうすればよいですか?

いくつかの方法がありますが、ユースケースを考えると、JButton/JRadioButtonまたはのタブとしてJTabbedPane、またはまたはJListの中でそれを使用することを検討するかもしれませんJComboBox

可能性のクイックツアーについては、Swingコンポーネントのビジュアルガイドをご覧ください。

于 2012-08-09T14:46:23.810 に答える
3

AndrewThomponの提案に加えて、チャートをペイントする機能を持つカスタムコンポーネントを提供できます。

を見てみましょう

これは、すでに提案されているよりもはるかに複雑ですが、最大の柔軟性を提供します

于 2012-08-09T14:53:19.260 に答える