グラフィック描画
図1のダイヤモンド・パターンの描画を行う。

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

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

フレームの大きさは、図4に示されているようにSource上で設定する。図3のDesignペインでは、フレームcontentPaneのlayoutプロパティが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で開くと実行することができる。