|
|
|||||||||||||||||||||||||||||
|
JFreeChart を使ったグラフ作成 JFreeChartの利用 |
H.Kamifuji . |
|
JFreeChartでは作成したグラフを画像などに出力する他に、Swingベースのコンポーネントとして利用することが可能です。ここではJFreeChartを使ったJavaアプリケーションの作り方を確認します。 当ページでは、Linux CentOS7 の Gnome で動作テストしています。 現在(2021/08)では、JDK-16.0.2 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2023/04)では、JDK-20.0.1 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2024/10)では、JDK-23 に、アップされています。JDK-23 + jfreechart-1.0.19 で、上位互換について、見直しを行っていきます。 |
|
|
|
ChartFrameクラスはJFrameクラスのサブクラスです。ここではフレーム内にグラフを表示させる方法を確認します。 ChartFrameクラスのクラス図は次のように定義されています。
java.lang.Object
L java.awt.Component
L java.awt.Container
L java.awt.Window
L java.awt.Frame
L javax.swing.JFrame
L org.jfree.chart.ChartFrame
public class ChartFrame extends javax.swing.JFrame
ChartFrameクラスはJFrameクラスのサブクラスとなっています。用意されているコンストラクタは次の2つです。
1番目のコンストラクタを確認してみます。 ChartFrame public ChartFrame(java.lang.String title, JFreeChart chart)Constructs a frame for a chart. Parameters: title - the frame title. chart - the chart. 引数にはフレームのタイトルと、JFreeChartクラスのオブジェクトを指定します。 ChartFrameではフレームの背景画像のようにグラフが貼り付けられているわけではなく、JFreeChartクラスのオブジェクトを元に作成したChartPanelクラスのオブジェクトが作成されてフレーム内に追加されています。(ChartPanelクラスについては次のページで解説します)。 実際の使い方は次のようになります。
DefaultPieDataset data = new DefaultPieDataset();
JFreeChart chart =
ChartFactory.createPieChart("Title", data, true, false, false);
ChartFrame frame = new ChartFrame("Title", chart);
frame.setBounds(10, 10, 400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
ChartFrameクラスはJFrameクラスのサブクラスですので、JFrameクラスで用意されている「setBounds」メソッドで位置とサイズを設定し、「setDefaultCloseOperation」メソッドで終了処理を追加し、「setVisible」メソッドでフレームを表示しています。(JFrameクラスについては「JFrameクラス」を参照して下さい)。グラフを表示するフレームを簡単に作成するには便利ですが、イベント処理などより細かい制御を行う場合にはChartPanelクラスを使用して下さい。 では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* ChartFrameクラス
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.chart.ChartFrame;
import javax.swing.JFrame;
public class Test1_1{
public static void main(String[] args) {
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("1個", 20);
data.setValue("2個", 45);
data.setValue("3個", 10);
data.setValue("4個", 8);
data.setValue("その他", 17);
JFreeChart chart =
ChartFactory.createPieChart("金メダル予想", data, true, false, false);
ChartFrame frame = new ChartFrame("Title", chart);
frame.setBounds(10, 10, 400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() フレームのサイズを変更するとグラフもフレームに合わせて変更されます。 ![]() |
|
ChartPanelクラスはJPanelクラスのサブクラスです。JFreeChartクラスのオブジェクトを元にChartPanelクラスのオブジェクトを作成し、JFrameクラスのオブジェクトなどに追加することでJavaアプリケーションでグラフを表示することが出来ます。 ChartPanelクラスのクラス図は次のように定義されています。
java.lang.Object
L java.awt.Component
L java.awt.Container
L javax.swing.JComponent
L javax.swing.JPanel
L org.jfree.chart.ChartPanel
public class ChartPanel extends javax.swing.JPanel implements ChartChangeListener, ChartProgressListener, java.awt.event.ActionListener, java.awt.event.MouseListener, java.awt.event.MouseMotionListener, java.awt.print.Printable, java.io.SerializableChartPanelクラスはJPanelクラスのサブクラスとなっています。ActionListenerやMouseListenerの他にChartChangeListenerやChartProgressListenerをインプリメントしておりイベント処理を行うこともできます。 用意されているコンストラクタは次の4つです。
基本となる1番目のコンストラクタを確認してみます。 ChartPanel public ChartPanel(JFreeChart chart)Constructs a panel that displays the specified chart. Parameters: chart - the chart. 引数にはJFreeChartクラスのオブジェクトを指定します。 ChartFrameではフレームの背景画像のようにグラフが貼り付けられているわけではなく、JFreeChartクラスのオブジェクトを元に作成したChartPanelクラスのオブジェクトが作成されてフレーム内に追加されています。(ChartPanelクラスについては次のページで解説します)。 実際の使い方は次のようになります。
DefaultPieDataset data = new DefaultPieDataset();
JFreeChart chart =
ChartFactory.createPieChart("Title", data, true, false, false);
ChartPanel cpanel = new ChartPanel(chart);
ChartPanelクラスはJPanelクラスのサブクラスですのでJPanelクラスの多くのメソッドを利用できます。(JPanelクラスについては「JPanelクラス」を参照して下さい)。ChartPanelクラスのオブジェクトを作成したら、JFrameクラスのオブジェクトに追加して利用します。簡単な使い方は次のサンプルを見てください。 では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* ChartPanelクラス
*/
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;
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, 400, 300);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test2_1(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("支持する", 40);
data.setValue("支持しない", 55);
data.setValue("未回答", 5);
JFreeChart chart =
ChartFactory.createPieChart("支持率", data, true, false, false);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() |
|