サブタイトルの取得(getSubtitle, getSubtitleCount, getSubtitles)

広告

グラフに追加したサブタイトルを取得する方法を確認します。まず現在追加されているサブタイトルの数を取得します。JFreeChartクラスで用意されている「getSubtitleCount」メソッドを使います。

Returns the number of titles for the chart.

Returns:
  The number of titles for the chart.

メソッドを実行すると現在グラフに追加されているサブタイトルの数を返します。

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

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

TextTitle title = new TextTitle("タイトル");
chart.setTitle(title);

TextTitle subtitle1 = new TextTitle("サブタイトル1");
chart.addSubtitle(subtitle1);
TextTitle subtitle2 = new TextTitle("サブタイトル2");
chart.addSubtitle(subtitle1);

int count = chart.getSubtitleCount();

上記の場合、凡例が表示されるように設定されている場合は凡例も含めてサブタイトルの数は3となります。凡例が表示されないように設定されている場合、サブタイトルの数は2となります。

タイトルの取得

次にインデックスを指定してサブタイトルを表すTitleクラスのオブジェクトを取得します。JFreeChartクラスで用意されている「getSubtitle」メソッドを使います。

Returns a chart subtitle.

Parameters:
  index - the index of the chart subtitle (zero based). 
Returns:
  A chart subtitle.

引数に指定したインデックスのサブタイトルを表すTitleクラスのオブジェクトを取得します。

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

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

TextTitle title = new TextTitle("タイトル");
chart.setTitle(title);

TextTitle subtitle1 = new TextTitle("サブタイトル1");
chart.addSubtitle(subtitle1);
TextTitle subtitle2 = new TextTitle("サブタイトル2");
chart.addSubtitle(subtitle1);

for (int i = 0 ; i < chart.getSubtitleCount() ; i++){
  System.out.println(chart.getSubtitle(i).getClass().getName());
}

上記では現在追加されているサブタイトルを順に取り出し、サブタイトルのクラス名を標準出力に出力しています。

全てのタイトルの取得

サブタイトルを表すTitleクラスのオブジェクトを全て取得することも可能です。JFreeChartクラスで用意されている「getSubtitles」メソッドを使います。

Returns the list of subtitles for the chart.

Returns:
  The subtitle list (possibly empty, but never null).

メソッドを実行すると、現在追加されている全てのサブタイトに対し、サブタイトルを表すTitleクラスのオブジェクトを取り出し、各オブジェクトを要素に持つListインターフェースを実装したクラスのオブジェクトとして取得できます。

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

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

TextTitle title = new TextTitle("タイトル");
chart.setTitle(title);

TextTitle subtitle1 = new TextTitle("サブタイトル1");
chart.addSubtitle(subtitle1);
TextTitle subtitle2 = new TextTitle("サブタイトル2");
chart.addSubtitle(subtitle1);

ArrayList list = (ArrayList)chart.getSubtitles();
for (int i = 0 ; i < list.size() ; i++){
  System.out.println(list.get(i).getClass().getName());
}

上記では現在追加されているサブタイトルを順に取り出し、サブタイトルのクラス名を標準出力に出力しています。

サンプルプログラム

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

Test17_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.TextTitle;
import java.awt.Font;
import java.awt.Color;
import java.util.ArrayList;

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

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

  Test17_1(){
    JFreeChart chart = 
      ChartFactory.createPieChart("",
                                   createData(),
                                   true,
                                   false,
                                   false);

    TextTitle title = new TextTitle("夏の旅行");
    title.setFont(new Font("MS 明朝", Font.PLAIN, 28));
    chart.setTitle(title);

    TextTitle subtitle1 = new TextTitle("2008年");
    chart.addSubtitle(subtitle1);

    TextTitle subtitle2 = new TextTitle("調査期間 7月1日から7月31日");
    subtitle2.setFont(new Font("MS 明朝", Font.PLAIN, 16));
    subtitle2.setPaint(Color.RED);
    chart.addSubtitle(subtitle2);

    TextTitle subtitle3 = new TextTitle("対象年齢 20代女性");
    chart.addSubtitle(subtitle3);

    for (int i = 0 ; i < chart.getSubtitleCount() ; i++){
      System.out.println(chart.getSubtitle(i).getClass().getName());
    }

    ArrayList list = (ArrayList)chart.getSubtitles();
    for (int i = 0 ; i < list.size() ; i++){
      System.out.println(list.get(i).getClass().getName());
    }

    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アプリケーションが起動します。

サブタイトルの取得(getSubtitle, getSubtitleCount, getSubtitles)

この時、画面出力には次のように出力されています。

サブタイトルの取得(getSubtitle, getSubtitleCount, getSubtitles)

最初に表示されている「LegendTitle」は凡例を表すクラスです。

( Written by Tatsuo Ikura )