|
|
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.JFrameChartFrameクラスは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); } }上記をコンパイルした後で実行すると次のように表示されます。 ![]() |
|