Y.Okamoto@Psy.JWU

グラフィック描画

 

 図1のダイヤモンド・パターンの描画を行う。

 

図1の場合、フレーム上のパネル(jPanel1)に描画を行っている。そのため、図2に示すように、描画を行うパネルのメソッドgetGraphicsによってグラフィックス描画のためのオブジェクト(Graphicsクラス)を生成してGraphics型変数gで表している。

 

 

描画を行うパネル(JPanelコンポーネント)はSwing Containersに用意されている(図3)。フレーム(contentPane)のlayoutプロパティをnullに設定してからJPanelコンポーネントをフレーム上に貼り付ける。

 

 

フレームの大きさは、図4に示されているようにSource上で設定する。図3のDesignペインでは、フレームcontentPanelayoutプロパティがnullに設定されていても変更できない。

 

 

パネルjPanel1のサイズと位置は、layoutプロパティがnullに設定されているならば、図3のdesignペイン上で変更設定できるが、図3のように大きなパネルの場合は、図5に示すようにSourceで設定する方が作業は楽である。

フレームとパネルの背景色の設定をColorオブジェクトを用いるといろいろな色の設定を行うことができる(図5)。

 

 

コンストラクタColorの3つのパラメタは、順に赤、緑、青の光の強さを表し、図5では0から255の範囲の整数値指定する場合を表している。コンストラクタColorを用いようとすると図6のようにエラーが表示されることがある。

 

 

このときは、図7に示すように、java.awtのクラスの使用を宣言する

 

import java.awt.*;

 

を書き加えると、図6のエラーは消える。

 

 

ダイアモンド・パターンの頂点の数を設定するためのテキストフィールドと描画開始のためのボタンを貼り付ける(図8)。

 

 

ボタン「Draw」のクリックによる処理内容はリスト1のようになっている。

 

リスト1

 

    public void jButtonDraw_actionPerformed(ActionEvent e) {

 

        int n = Integer.parseInt(jTextField1.getText());

 

        if (n < 5) n = 5;

 

        //  頂点の座標値用の配列

        double posx[] = new double[n];

        double posy[] = new double[n];

 

        //   (x0,y0): パネルの中心

        int x0 = jPanel1.getWidth() / 2;

        int y0 = jPanel1.getHeight() / 2;

 

        //  r: ダイアモンドパターンの半径

        int r  = (int)(x0*0.9);

 

        //   頂点(posx[i], posy[i])の設定

        for (int i = 0; i < n; i++) {

            posx[i] = x0 + r*Math.cos(Math.toRadians(90+i*360.0/n));

            posy[i] = y0 - r*Math.sin(Math.toRadians(90+i*360.0/n));

        }

 

 

        Graphics  g = jPanel1.getGraphics();

 

        //  パネル全体の塗りつぶし

        g.setColor(new Color(255,220,220));

        g.fillRect(0,0,jPanel1.getWidth(),jPanel1.getHeight());

 

        g.setColor( new Color(0,0,255));

 

        //   ダイアモンド・パターンの作成

        //   頂点間を線分で結ぶ

        for (int i = 0; i < n; i++) {

          for (int j = 0; j < n; j++) {

              g.drawLine((int)posx[i], (int)posy[i],

                         (int)posx[j], (int)posy[j] );

          }

        }

 

    }

 

 

リスト1のようにコードを書き込み、フレーム(contentPane)のlayoutプロパティをGridBagLayoutに設定してから実行する(図9)。Layoutプロパティがnullのままで実行すると、実行時のフレームとデザイン時のフレームとの違いが目立つことがある。

 

 

実行時のフレームにおいてNの値をテキストフィールドに設定してから「Draw」ボタンをクリックすると図1ように描画が行われる。

 

上のサンプルプログラムのファイルを圧縮ファイルCkDiamond.ZIPとしてまとめた。CkDiamond.ZIPここをクリックしてダウンロードできる。ダウンロードして解凍すると作成されるフォルダCkDiamondにあるプロジェクトファイルCkDiamond.jpxをダブルクリックなどによりJBuilderで開くと実行することができる。

 

Up