SHOEISHA iD

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

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

ComponentZine(WebCharts3D)

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

WebCharts3D 5.2Jを使ったJavaクライアント開発

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

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

Javaの開発で一番大変なのがグラフィックス処理です。特に業務用アプリケーションなどではグラフを描画しようとすると、相当な量のコードを書かなければなりません。WebCharts3D 5.2Jは、さまざまな種類のグラフをJavaアプリケーションやアプレットに実装することができるチャートコンポーネントです。

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

はじめに

 Javaの開発で1番大変なのがグラフィックス処理です。特に業務用アプリケーションなどではグラフを描画しようとすると、相当な量のコードを書かなければなりません。もっと簡単にグラフを実装できるクラスがあると、開発工数をかなり削減できます。

 WebCharts3D 5.2Jは、さまざまな種類のグラフをJavaアプリケーションや、アプレットに実装できるチャートコンポーネントです。専用のグラフ作成デザイナーを持ち、さらにJavaの統合開発環境ソフトEclipseへのプラグインも提供します。

 そこで、Eclipseを使ってSwingコンポーネントでグラフを表示するJavaのWindowsアプリケーション(クライアントサイド)を作ってみました。

Eclipseの中でグラフを作成しコード化する
Eclipseの中でグラフを作成しコード化する
生成したコードを元にWindowsアプリケーションでグラフを表示する
生成したコードを元にWindowsアプリケーションでグラフを表示する

対象読者

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

必要な環境

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

  • Windows Vista Service Pack1
  • jdk1.6.0_05
  • Eclipse 3.3.1.1

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

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

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

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

Eclipseへのプラグインの追加

 WebCharts3D 5.2Jをインストールしたら、以下の手順でEclipseにプラグインとして組み込みます。

  1. Eclipseのメニューから[ヘルプ]-[ソフトウェア更新]-[検索とインストール]を選択します。
  1. [インストールする新規フィーチャーを検索]を選択し、[次へ]ボタンをクリックします。
  1. [新規ローカル・サイトボタン]をクリックし、WebCharts3Dをインストールしたディレクトリにある「eclipse」フォルダを選択し[OK]ボタンをクリックします。
  1. 新規に追加されたサイトチェックボックスがオンになっていることを確認し、[終了]ボタンをクリックします。
  1. [WebCharts 3D for Eclipse]のチェックボックスをオンにし[次へ]をクリックします。
  1. 使用許諾契約の[使用条件の条項に同意します]を選択し[次へ]をクリックします。
  1. [終了]をクリックします。
  1. フィーチャーの検査画面で[インストール]をクリックします。これでプラグインがインストールされます。
  1. インストール処理が完了すると、Eclipse の再起動を求めるダイアログボックスが表示されるので、[はい]をクリックしEclipseを再起動します。

WebCharts3D 5.2Jについて

 WebCharts3D 5.2Jは、Javaのプログラムに簡単にグラフを実装させることができるコンポーネントです。棒グラフ、折れ線グラフ、円グラフ、HiLoOpenCloseチャート、ガントチャート、ゲージ、マップなど30種類のグラフを、専用のデザイナやEclipseプラグインエディタで簡単に作成でき、作成したグラフをJSP直接出力、JSP間接出力、JSPカスタムタグ、JSF、Applet、Swing、SWTの7種類のJavaコードとして出力します。また、グラフのスタイルやモデルをXMLコードで生成することも可能です。

 グラフの元となるデータは、JavaのコードでもXMLファイルでも指定可能です。

専用デザイナでのグラフ作成
専用デザイナでのグラフ作成
同じ画面がEclipseではプラグインで使える
同じ画面がEclipseではプラグインで使える

 グラフのスタイルデザインは、プロパティウィンドウを使って行います。プロパティの変更がそのままグラフに反映されます。

 作成したスタイルは「XMLスタイル」タブを、グラフの元データは「XMLモデル」タブに作成されます。「コードビュー」タブには、コード全文が記述されるので、これらをJavaのコードにコピー・ペーストするだけで、プログラムにグラフを実装できます。

グラフの作成 1

 では、実際にグラフ作成してみましょう。グラフのソースコードは、組み込むJavaプログラムのプロジェクトに格納されるので、最初にプロジェクトを作成します。

プロジェクトの作成

 プロジェクトは、通常のJavaアプリケーションを作成するプロジェクトを用意します。このとき、ライブラリーにWebCharts3D 5.2Jのjarファイルを指定しておきます。この指定を行わないと、クラスのインポートができません。

1

 プロジェクト作成の2番目の画面で、「ライブラリー」タブをクリックし、「外部JARの追加」ボタンを押します。

2

 WebCharts3D 5.2Jをインストールしたフォルダの中にある「lib」フォルダの「wc50.jar」ファイルを指定します。これで、WebCharts3D 5.2Jをプロジェクトで使用できるようになります。

グラフの作成

 次に、グラフそのものを作成します。グラフ作成はウィザードによって行います。元データは、とりあえずデフォルトのものを使用します。

1

 Eclipseのメニューから[ファイル]-[新規]-[その他]を選びます。ウィザード選択画面が表示されるので、「WebCharts3Dギャラリー」を選んで[次へ]ボタンを押します。

2

 チャートギャラリーで使いたいチャートを選びます。ここでは「2D棒グラフ」の2番目を選びます。

「2D棒グラフ」の2番目を選ぶ
「2D棒グラフ」の2番目を選ぶ
3

 ファイルのコンテナを指定します。これは、今作成したプロジェクトを指定します。[終了]ボタンを押すと、プロジェクトにチャートが組み込まれます。

プロジェクトにチャートが組み込まれる
プロジェクトにチャートが組み込まれる
4

 Eclipseのメニューから[ウィンドウ]-[ビューの表示]-[その他]を選びます。[一般]をクリックして展開し、「プロパティー」を選び、プロパティーウィンドウを表示します。

 このプロパティーウィンドウで、グラフのさまざまなスタイルを設定します。

グラフスタイルのプロパティウィンドウ
グラフスタイルのプロパティウィンドウ

グラフの作成 2

プログラムコードの作成とグラフのコード化

 作成したグラフをSwingコンポーネントのJPanelコンポーネントに組み込んで、フレームで表示するようにします。

 まず、WindowsアプリケーションになるようにJavaのコードを組み立てます。ここでは、JPanelクラスから派生させたサブクラス「drawpanel」を定義し、ここにグラフを表示するコードを組み込みます。

import java.awt.Container;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class mychart {
    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.setBounds(300, 300, 450, 350);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

class drawpanel extends JPanel implements ActionListener{    
    private static final long serialVersionUID = 1L;
    JButton button1;
    JPanel pnl1;
    
    drawpanel(){
        button1 = new JButton("閉じる");
        button1.addActionListener(this);
        
        pnl1 = new JPanel();
                
        this.add(pnl1);
        this.add(button1);
    }
    
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==button1){
            System.exit(0);
        }

 次に、グラフのコードを組み込みます。といっても、グラフのJavaコードは既にウィザードによって作成されているので、後はこれをコピー&ペーストするだけです。

 Eclipseのグラフファイルにある「コードビュー」タブをクリックします。そして、左下のリストから「Swing」を選ぶと、XMLで記述されているコードが、Swingコンポーネントにチャートを表示するJavaのテンプレートコードに入れ替わります。

リストから「Swing」を選ぶと
リストから「Swing」を選ぶと
Swingコンポーネント用のJavaコードに変わる
Swingコンポーネント用のJavaコードに変わる

グラフの実装

 後は、それぞれのパートにこのコードをコピー&ペーストしていきます。まず、import文すべてをコピーします。

import com.gp.api.styles.chart.MxFrameChartStyle;
import com.gp.api.styles.MxStandardConstants;
import com.gp.api.styles.MxElementStyle;
import com.gp.api.model.MxStandardChartModel;
import com.gp.api.styles.MxMorphStyle;
import com.gp.api.styles.elements.MxPaletteStyle;
import com.gp.api.swing.MxComponent;
import com.gp.api.styles.MxWidgetStyle;
import com.gp.api.styles.MxBackgroundStyle;

 次に、メソッドaddChartを、サブクラス「drawpanel」の中に記述します。

 チャートを表示するには、「MxComponent」クラスのインスタンスを作成し、このオブジェクトにチャートのスタイルとモデルを設定します。setStyleメソッドはチャートのスタイルを、setModelメソッドはモデル(データを含む)をそれぞれ設定します。

private void addChart(javax.swing.JPanel panel) {
    MxComponent chart = new MxComponent();
    panel.add(chart);
    chart.setStyle(getWidgetStyle());
    chart.setModel(getModel());
    chart.setSize(400,300);
}

 続けて、チャートのスタイルを定義しているコード、getWidgetStyleメソッドをその下にコピーします。

private MxWidgetStyle getWidgetStyle() {
    MxFrameChartStyle style = new MxFrameChartStyle();
    style.is3D = false;
    style.font = new java.awt.Font("Dialog",0,11);
    style.frame.xDepth = 12;
    style.frame.yDepth = 11;
    style.xAxis.titleStyle.font
     = new java.awt.Font("Dialog",java.awt.Font.BOLD,14);
    style.yAxis.scaleMin = "0";
    style.yAxis.scaleMax = "450";
    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.allowSpan = true;
    style.legend.equalCols = false;
    style.legend.halign = MxStandardConstants.HAlignment.RIGHT;
    style.legend.isMultiline = true;
    style.legend.decoration.style
     = MxStandardConstants.Decoration.NONE;
    style.elements.place = MxElementStyle.Place.STACKED;
    style.elements.drawShadow = true;
    style.elements.morph.morph = MxMorphStyle.MorphStyle.GROW;
    style.title.font
     = new java.awt.Font("Dialog",java.awt.Font.BOLD,16);
    style.background.type
     = MxBackgroundStyle.BackgroundPaint.DIAGONALLTRBGRADIENT;
    style.decoration.style
     = MxStandardConstants.Decoration.ROUNDSHADOW;
    style.paint.palette = MxPaletteStyle.PASTEL;
    style.paint.isVertical = true;
    style.paint.min = 47;
    style.paint.max = 83;
    style.insets.right = 5;

    return style; 
}

 また、チャートの元データとチャートの数などを定義するメソッド、getModelをその下にコピーします。

private MxStandardChartModel getModel() {
    MxStandardChartModel model = new MxStandardChartModel();     
    model.insertCol("2000",null,-1);
    model.insertCol("2001",null,-1);
    model.insertCol("2002",null,-1);
    model.insertCol("2003",null,-1);
    model.insertCol("2004",null,-1);
    model.insertRow("春", new double [] 
                    { 100.0, 200.0, 100.0, 180.0, 200.0 } ,-1);
    model.insertRow("夏", new double [] 
                    { 150.0, 300.0, 250.0, 230.0, 250.0 } ,-1);
    model.insertRow("秋", new double [] 
                    { 200.0, 400.0, 400.0, 280.0, 300.0 } ,-1);
    model.insertRow("冬", new double [] 
                    { 250.0, 500.0, 550.0, 330.0, 350.0 } ,-1);
    return model;
}

 最後に、クラス「drawpanel」のコンストラクタで、addChartメソッドを呼び出します。引数は、チャートを表示するコンテナコンポーネントです。ここでは、もう1つJPanelを実装しここにチャートを表示するようにしています。

class drawpanel extends JPanel implements ActionListener{    
    ...    
    ...
    drawpanel(){
        ...
        ...
        addChart(pnl1);
                
        this.add(pnl1);
        this.add(button1);
    }

 これでできあがりです。今回は、ウィザードによってグラフを作成し、背景をグラデーションで塗りつぶすようにしてからコードをペーストしましたが、コードをペーストしてからグラフのスタイルを変更した場合は、再度修正後のコードをペーストし直さないと、修正が反映されませんので注意してください。

まとめ

 昨今のGUIアプリケーションは、たとえグラフといえども魅力的な表現が求められる傾向にありますが、WebCharts3D 5.2Jは、驚くほど簡単にとても綺麗で表現力豊かなグラフをJavaアプリケーションに実装できます。

 何よりも、面倒なJavaコードを自動生成してくれるのはとてもありがたい機能であり、開発ソリューションにとっては、開発工数・工期を削減してくれる大きな効果を生み出してくれることでしょう。

 次回は、さらにコードからグラフを操作する機能を組み込んでみたいと思います。

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

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2814 2008/08/28 17:57

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング