凡例の取得と追加(setTitle, getTitle)

広告

LegendTitleクラスのオブジェクトを使い凡例を作成することが出来ますが、作成した凡例はサブタイトルなどと同じようにグラフに追加して利用します。判例をグラフに追加するにはJFreeChartクラスで用意されている「addLegend」メソッドを使います。

Adds a legend to the plot and sends a ChartChangeEvent to all registered 
listeners.

Parameters:
  legend - the legend (null not permitted).

引数には追加する凡例を表すLegendTitleクラスのオブジェクトを指定します。

例えば次のように記述します。

JFreeChart chart = ChartFactory.createPieChart(...);    /* 引数は省略 */

LegendTitle legend = new LegendTitle(chart.getPlot());
chart.addLegend(legend);

グラフに凡例が追加されます。

凡例の取得

グラフに追加されている凡例を取得することが出来ます。JFreeChartクラスで用意されている「getLegend」メソッドを使います。

Returns the legend for the chart, if there is one. Note that a chart can 
have more than one legend - this method returns the first.

Returns:
  The legend (possibly null).

メソッドを実行するとグラフに追加されている凡例を表すLegendTitleクラスのオブジェクトを取得できます。

取得したLegendTitleクラスのオブジェクトに対し設定を行うと、その対象となる凡例に設定が反映されます。

なおグラフには複数の凡例を追加することが可能であり、凡例は追加された順にインデックスが割り当てられていきますが、上記のメソッドを使うと一番先頭の凡例を取得します。

例えば次のように記述します。

JFreeChart chart = ChartFactory.createPieChart(...);    /* 引数は省略 */

LegendTitle legend = chart.getLegend();

指定のインデックスの凡例を取得するには引数の異なる「getLegend」メソッドが用意されています。

Returns the nth legend for a chart, or null.

Parameters:
  index - the legend index (zero-based). 
Returns:
  The legend (possibly null).

引数に取得したい凡例のインデックスを指定します。

例えば次のように記述します。

JFreeChart chart = ChartFactory.createPieChart(...);    /* 引数は省略 */

LegendTitle legend = chart.getLegend(1);

サンプルプログラム

では簡単なサンプルを作成して試してみます。

Test2_1.java

import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;

import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;

import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;

public class Test2_1 extends JFrame{
  public static void main(String[] args) {
    Test2_1 frame = new Test2_1();

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(10, 10, 500, 500);
    frame.setTitle("グラフサンプル");
    frame.setVisible(true);
  }

  Test2_1(){
    JFreeChart chart = 
      ChartFactory.createPieChart("夏の旅行",
                                   createData(),
                                   true,
                                   false,
                                   false);

    LegendTitle legend = chart.getLegend();
    chart.addLegend(legend);

    ChartPanel cpanel = new ChartPanel(chart);
    getContentPane().add(cpanel, BorderLayout.CENTER);
  }

  private DefaultPieDataset createData(){
    DefaultPieDataset data = new DefaultPieDataset();
    data.setValue("海外", 30);
    data.setValue("国内", 60);
    data.setValue("行かない", 8);
    data.setValue("未定", 2);

    return data;
  }
}

上記をコンパイルした後で実行すると次のようにJavaアプリケーションが起動します。

凡例の取得と追加(setTitle, getTitle)

「createPieChart」メソッドの引数で凡例を表示するように設定を行っています。そしてグラフに登録された凡例を取得した上で、再度グラフに追加しています。同じLegendTitleクラスのオブジェクトが元になっているのでまったく同じ凡例が表示されます。

( Written by Tatsuo Ikura )