SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(WebCharts3D)

グラフを表示するJavaクライアントアプリケーションを作る-Part3

メニューでグラフの種類を変える

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード サンプルソース (15.2 KB)

 今回は、メニューからグラフの種類を変更できるようにします。これまでは、3D縦棒グラフでデータを表示していましたが、グラフの種類を折れ線グラフと円グラフに変えられるようにします。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 今回は、メニューからグラフの種類を変更できるようにします。これまでは、3D縦棒グラフでデータを表示していましたが、グラフの種類を折れ線グラフと円グラフに変えられるようにします。

 グラフの変更にはメニューを使用し、折れ線グラフと円グラフ用のスタイルを作成するコードを追加します。それぞれメニューが選ばれるとこれらのスタイルに入れ替えるようにします。

3D縦棒グラフを
3D縦棒グラフを
折れ線グラフや円グラフにグラフの種類を変えられるようにする
折れ線グラフや円グラフにグラフの種類を変えられるようにする

これまでの記事

対象読者

 Java、Swingコンポーネント、Eclipseを使ってプログラムを作ったことのある人

必要な環境

 JDK 5.0以降、Eclipse 3.0以降。

 なお、本プログラムは以下の環境で作成し動作確認を行っています。

  • Windows Vista Service Pack 1
  • jdk 1.6.0_05
  • Eclipse 3.3.1.1

コンポーネントのインストール

 はじめてWebCharts3D 5.2Jを使用する方は、プロジェクトにWebCharts3D 5.2Jをインストールする必要があります。

 インストーラは、グレープシティのWebページからダウンロードできますので、ここからダウンロードしてインストールしてください。製品ページ左側の[ダウンロード]-[トライアル版]をクリックし、ダウンロード方法([FTP]または[HTTP])を選択すれば入手できます。なお、トライアル版のダウンロードに際しては、ユーザー登録が必要になります。

 ファイルはLZH形式で圧縮されており、解凍してインストーラを起動します。有償のコンポーネントですが、プロダクトキーを入力せずにインストールすることで、トライアル版として使用できます。制限事項などの詳細については、インストーラに同梱されているリリースノートを参照ください。

Eclipseへのプラグインの追加

 前々回の記事を参照してください。

メニューの追加

 フレームに、グラフの表示を切り替えるメニューを追加します。

 トップメニュー「グラフの種類(G)」を作成し、その下にメニューアイテムに「折れ線グラフ」「円グラフ」「3D縦棒グラフ」を作成します。

トップメニュー「グラフの種類」とメニューアイテム
トップメニュー「グラフの種類」とメニューアイテム

メニューの作成

 JMenu、JMenuBarを使ってメニューを作成します。イベントリスナーは「ActionListener」なので、これを関連付けるのを忘れないでください。

 メニューの作成には、「createMenuBar」というクラスのメンバメソッドを独自に作成し、ここで行います。メソッドの戻り値は作成したJMenuBarコンポーネントのインスタンスにします。

class drawpanel extends JPanel implements ActionListener{    
    private static final long serialVersionUID = 1L;
    JButton button1;
    JPanel pnl1;
    
    // メニューコンポーネントの宣言を追加
    JMenu chartmenu;
    JMenuItem mi_line, mi_pie, mi_3dbar;
    ..........
    ..........

    public JMenuBar createMenuBar() {
            JMenuBar mb = new JMenuBar();
            
            chartmenu = new JMenu("グラフの種類(G)");
            mi_line = new JMenuItem("折れ線グラフ  ");
            mi_pie = new JMenuItem("円グラフ   ");
            mi_3dbar = new JMenuItem("3D縦棒グラフ");

            chartmenu.setMnemonic(KeyEvent.VK_G);

            chartmenu.add(mi_line);
            chartmenu.add(mi_pie);
            chartmenu.add(mi_3dbar);

            mi_line.addActionListener(this);
            mi_pie.addActionListener(this);
            mi_3dbar.addActionListener(this);

            mb.add(chartmenu);
            return mb;
    }

メニューバーの実装

 メニューとメニューバーができたら、mainメソッドでこのメニューバーをフレームに組み込みます。

public static void main(String[] args) {
    JFrame frame = new JFrame("グラフ表示");
    drawpanel panel1 = new drawpanel();
    Container ct = frame.getContentPane();
    ct.setLayout(new GridLayout());
    ct.add(panel1);
        
    // メニューバーの実装を追加
    frame.setJMenuBar(panel1.createMenuBar());
    ...
    ...
}

グラフスタイルの切り替え処理

 グラフの切り替えは、折れ線グラフと円グラフのスタイル定義を作成しておいて、これをchartオブジェクトのsetStyleメソッドで読み込むことで行います。

 従って、あらかじめWebCharts3Dギャラリーを使って、折れ線グラフと円グラフのスタイル定義を作成し、そのコード(メソッドのコード)をJavaアプリケーションのコードに組み込みます。

折れ線グラフと円グラフのスタイル定義の作成

 スタイル定義の作成はとても簡単です。前々回の記事でも紹介しましたが、もう一度ここでその方法を紹介しておきます。

1

 Eclipseのメニューから、「ファイル」-「新規」-「その他」を選びます。

2

 ウィザードを選択するダイアログが表示されますから、「WebCharts3Dギャラリー」を選んで「次へ」ボタンを押します。

ウィザードで「WebCharts3Dギャラリー」を選ぶ
ウィザードで「WebCharts3Dギャラリー」を選ぶ
3

 「チャートサンプルの選択」ダイアログで、「2D折れ線グラフ」をクリックし、左上のチャートをクリックして、「次へ」ボタンを押します。

「2D折れ線グラフ」の左上のチャートをクリックする
「2D折れ線グラフ」の左上のチャートをクリックする
4

 チャートを挿入するJavaのプロジェクトを指定し、適当なファイル名に変更して「終了」ボタンを押します。

チャートを挿入するJavaのプロジェクトを指定する
チャートを挿入するJavaのプロジェクトを指定する
5

 Eclipseに戻り、挿入されたチャートの「コードビュー」タブをクリックし、下のリストから「Swing」を選びます。すると、チャートのスタイル定義が「getWidgetStyle() 」というメソッドになって表示されます。

「コードビュー」タブをクリックし、下のリストから「Swing」を選ぶ
「コードビュー」タブをクリックし、下のリストから「Swing」を選ぶ
6

 このメソッドのコードだけを、アプリケーションのコードに貼り付け、メソッド名を「getLineStyle()」に変えます。というのも、既に3D縦棒グラフのスタイル定義が、「getWidgetStyle()」というメソッド名になっています。同じメソッド名の重複は許されないことと、どのグラフのスタイルなのかが分かるようにするため、メソッド名を変更します。

private MxWidgetStyle getLineStyle() {
     MxFrameChartStyle style = new MxFrameChartStyle();
     style.is3D = false;
     style.font = new java.awt.Font("Dialog",0,11);
     style.frame.xDepth = 3;
     style.frame.yDepth = 1;
     style.frame.leftAxisPlacement = MxFrameStyle.AxisPlacement.BACK;
     style.frame.isHStripVisible = true;
     style.frame.background.minColor = new java.awt.Color(253,254,246);
     style.xAxis.labelFormat.pattern = "#,##0.###";
     style.xAxis.parseFormat.pattern = "#,##0.###";
     style.xAxis.titleStyle.font = new java.awt.Font("Dialog",java.awt.Font.BOLD,14);
     style.yAxis.titleStyle.font = new java.awt.Font("Dialog",java.awt.Font.BOLD,14);
     style.yAxis2.titleStyle.font = new java.awt.Font("Dialog",java.awt.Font.BOLD,14);
     style.topYAxis.titleStyle.font = new java.awt.Font("Dialog",java.awt.Font.BOLD,14);
     style.topYAxis2.titleStyle.font = new java.awt.Font("Dialog",java.awt.Font.BOLD,14);
     style.dataLabels.font = new java.awt.Font("Dialog",0,12);
     style.legend.decoration.style = MxStandardConstants.Decoration.NONE;
     style.elements.place = MxElementStyle.Place.DEFAULT;
     style.elements.shape = MxElementStyle.Shape.LINE;
     style.elements.drawShadow = true;
     style.elements.morph.morph = MxMorphStyle.MorphStyle.GROW;
     style.title.font = new java.awt.Font("Dialog",java.awt.Font.BOLD,16);
     return style; 
}
7

 同じ手順で円グラフも作成し、スタイル定義のメソッドをアプリケーションのコードに貼り付けます。こちらは、メソッド名を「getpieStyle()」にします。

private MxWidgetStyle getpieStyle() {
     MxPieChartStyle style = new MxPieChartStyle();
     style.depth = MxPieChartStyle.Depth.DOUBLE;
     style.is3D = false;
     style.font = new java.awt.Font("Dialog",0,11);
     style.axis.titleStyle.font = new java.awt.Font("Dialog",java.awt.Font.BOLD,14);
     style.dataLabels.font = new java.awt.Font("Dialog",0,12);
     style.legend.placement = MxStandardConstants.Placement.RIGHT;
     style.legend.decoration.style = MxStandardConstants.Decoration.NONE;
     style.elements.morph.morph = MxMorphStyle.MorphStyle.GROW;
     style.elements.morph.stage = MxMorphStyle.MorphStage.COLS;
     style.title.font = new java.awt.Font("Dialog",java.awt.Font.BOLD,16);
     style.paint.palette = MxPaletteStyle.FIESTA;
     style.paint.paint = MxElementStyle.Paint.LIGHT;
     style.paint.max = 89;
     return style; 
}

グラフの切り替え処理-メニューのイベント処理

 グラフのスタイル定義が作成できたら、後はchartオブジェクトのスタイルを切り替えるだけです。この操作は、既に作成しているchartオブジェクトの設定と同じ要領で、

  • setStyleメソッドでスタイル定義を設定
  • setModelメソッドでデータモデルを設定
  • setSizeメソッドでチャートのサイズを設定

 という3つの操作を、それぞれのメニューのイベント処理の中で行うだけです。また、設定したグラフの各要素をグラフの表示に反映するために、最後にrepaintメソッドを実行します。

 なお、chartオブジェクトはイベントハンドラのメソッド内でも参照できるように、クラス「drawpanel」のメンバ変数になるよう宣言の位置を変えておきます。

class drawpanel extends JPanel implements ActionListener{    
    ...
    ...
    
    //この宣言をここに移動
    MxComponent chart;
    ...
    ...

    //アプリケーション起動時の3D縦棒グラフの表示処理
    private void addChart(javax.swing.JPanel panel) {
         chart = new MxComponent();
         panel.add(chart);
         chart.setStyle(getWidgetStyle());
         chart.setModel(getModel());
         chart.setSize(400,300);
    }
    
    //メニューとボタンのイベント処理
    public void actionPerformed(ActionEvent e) {
        .....
        .....
            
        // 3D縦棒グラフの表示
        if (e.getSource() == mi_line) {
            chart.setStyle(getLineStyle());
            chart.setModel(getModel());
            chart.setSize(400,300);
            chart.repaint();
        }
        
        // 円グラフの表示
        if (e.getSource() == mi_pie) {
            chart.setStyle(getpieStyle());
            chart.setModel(getModel());
            chart.setSize(400,300);
            chart.repaint();
        }
        
        // 3D縦棒グラフの表示
        if (e.getSource() == mi_3dbar) {
             chart.setStyle(getWidgetStyle());
             chart.setModel(getModel());
             chart.setSize(400,300);
        }
    }

 以上ででき上がりです。フレームにメニューを組み込んだので、フレームの高さが若干少なくなります。その分フレームのサイズを大きくしておいてください。

まとめ

 Javaで凝ったグラフを作るとなると、結構面倒なコーディングが必要になります。

 WebCharts3D 5.2Jコンポーネントがあれば、ウィザードでベースとなるグラフを作成し、必要によりプロパティでさらにオリジナリティを加えて使う、という使い方がとても簡単にできます。

 WebCharts3D 5.2Jを開発に導入するということは、開発工数の大幅な削減になるとともに、見栄えの良いアプリケーションに仕上げることができるという、コストメリットの高い選択肢になるのではないでしょうか。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3053 2008/09/24 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング