目次> 第16章> 16.7 TOPUPPREVNEXT

16.7 いたずら描き(swing版)

マウスでドラッグすると赤い線を引くプログラムを Swingを利用して作成してみましょう。 アプレットでなくアプリケーションとして作成します。 DOS画面でコンパイル・実行してください。

ソースプログラムは、 Graph6.java です。

実行結果

page-16-6.gif

プログラムの構造

page-16-7.gif

プログラムの概要

(3行目)
java.awt.image.BufferedImage を import します。
(9〜10行目)
線の始点の座標を保持する変数を宣言
(11〜12行目)
線の終点の座標
(13行目)
描画をする領域(イメージ)
(14行目)
描画領域の Graphics
(18〜37行目)
コンストラクタ
(19〜27行目)
アダプタを用いてマウス・モーション・リスナを設定します。
(20〜26行目)mouseDragged メソッドのオーバーライド
マウスがドラッグしているときに次々に呼び出されます。
(21〜22行目)
前回の描画の終点を今回の始点にします。
(23〜24行目)
ドラッグしていることが検出された時点の座標を今回の描画の終点にします。
(25行目)
自分自身(66行目の new でつくられた Graph6 のインスタンス)を 再表示するように依頼します。一旦Javaのシステムに飛び込んでから、 39行目の paintComponent メソッドがコールバックされてきます。
アダプタを用いてマウス・リスナを設定します。
(28〜34行目) MousePressed メソッドのオーバーライド
マウスボタンが押されたときに呼び出されます。
(30〜33行目)
マウスカーソルの座標をを始点と終点に設定します。
(36行目)
背景色を設定しておきます。これで描画用のパネルの生成は完了です。
(39〜59行目)paintComponent メソッドのオーバーライド
最初に画面を表示する時、プログラムで repaint() が呼ばれた時、 その他システムが画面を再描画する必要があると判断した時にコールバックされます。
(40〜48行目)
画面を最初に表示するときだけ実行します。
(42〜43行目)
パネルの幅と高さをしらべ、
(44行目)
おなじ大きさの BufferedImage を作成し image という名前をつけ、
(45行目)
image の Graphics に imageGraphics という名前をつけておきます。
(46〜47行目)
imageGraphics に対して、 setColor と fillRect をほどこすことによって image 全体を背景色で塗つぶしています。
(49行目)
Graph6の親、すなわち JPanel の描画をすませます。
(50〜57行目)
始点と終点が離れている場合に実行します。
(51行目)
描画色の設定
(52行目)
始点と終点を線で結びます。
(53〜56行目)
始点の上下左右の4点と終点の4点をそれぞれ結び、線を太くします。
(57行目)
できたイメージを g に書き込みます。 これにより Graph6 のインスタンスに画が表示されます。
(61〜69行目)
main メソッド。
ウィンドウの生成と、Graph6のインスタンスの生成と貼り付け。 ウィンドウの表示。


更新日:2003-12-04 TOPUPPREVNEXT