作って覚えるJavaプログラミングのススメ 第8回
掌田 津耶乃 [著] 2008/06/09 14:00

1 2 3 4 →

はじめに

 GUIに独自の表示を行うには、直接描画を行う機能が必要となります。このために用意されているのが、Graphicsクラスです。このクラスの基本的な使い方をマスターして、コンポーネントに自由に描画できるようになりましょう。

対象読者

  • Javaに興味がある、けれどプログラミング経験がない、という人。
  • Javaに興味がある、けれど何から手をつければいいか分からない、という人。
  • Javaに興味はない、でも何でもいいからプログラミングをしたい、という人。

グラフィック描画の仕組み

 AWTやSwingといったGUI構築のライブラリには、各種のコンポーネントが用意されています。これらを組み合わせれば、基本的な画面表示を行うことはでしょう。が、それ以上のことを行うには、独自に描画を行うための機能を理解する必要があります。

 AWT/Swingのコンポーネントには、それぞれにGraphicsというクラスが組み込まれています。これはjava.awtパッケージにあるクラスで、そのコンポーネントの表示を行う働きを持つものです。一般に「グラフィック・コンテキスト」と呼ばれるのですが、要するに「描画に関する情報を管理しているもの」と考えてください。

 このGraphicsには多数の描画用メソッドが用意されており、それらを呼び出すことでコンポーネントへの図形の描画を行うことができます。またjava.awtパッケージにあることからも分かるように、これはAWT/Swing両方で共通して利用されます。

 このGraphicsは、コンポーネントに用意されているgetGraphicsというメソッドで得ることができます。では、実際にGraphicsを利用して描画する簡単なサンプルを作成してみましょう。

package codezine.java;

import java.awt.*;
import javax.swing.*;

public class Sample extends JFrame {
    Graphics g;

    public Sample(){
        this.setSize(300, 200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
        this.g = this.getGraphics();
        // 描画のサンプル
        g.setColor(Color.RED);
        g.fillOval(50, 50, 100, 100);
        g.dispose();
    }

    public static void main(String[] args) {
        new Sample();
    }
}
実行すると、赤い円が描かれる。ただし、うまく表示されないケースもある。
実行すると、赤い円が描かれる。ただし、うまく表示されないケースもある。

 これは、getGraphicsthis(つまり、表示されているウインドウJFrame)のGraphicsを取得し、そのメソッドを呼び出してウインドウに図形を描画する簡単なサンプルです。実行すると、ウインドウに赤い円が表示されます(ただし! このソースコードには問題があります。詳細は後述)。

 さっそく描画を行っている部分を見てみましょう。まず、this.getGraphicsGraphicsインスタンスを取得していますね。それから、次のようにして描画に使う色を設定しています。

g.setColor(Color.RED);

 Graphicsでの図形の描画は「色を設定する」「描画をする」といったことの繰り返しになります。Graphicsでは、描画図形の色に関する情報が保持されており、描画のためのメソッドを実行すると、この保持されている色を使って描画を行うようになります。そこで、最初にsetColorというメソッドを呼び出して描画に使う色を設定しておくのです。

 描画の色は、java.awtパッケージのColorクラスを使って指定します。これは色に関する情報を管理するクラスです。RGBの輝度を指定して新たなColorを作成することもできますが、主な色については最初からクラスフィールドとして用意されているのでそれを利用するとよいでしょう。ここではColorクラスのREDというクラスフィールドを使っています。名前から分かるように、赤のColorインスタンスです。

 続いて、円の描画を行います。これは、GraphicsクラスのfillOvalというメソッドを使います。このfillOvalは、描画図形の位置と大きさを引数で渡すと指定の図形を描画するというものです。Graphicsの描画メソッドは、大体このように位置と大きさを渡して描画させます。

 そして、最後にGraphicsdisposeというメソッドを呼び出しています。これは、このGraphicsインスタンスを破棄するものです。なんでこんなことをするの? と思うでしょうが、これには深いわけがあります。実は、このGraphicsは、その内部でJava仮想マシン外の機能(要するに、OSにあるAPIなど)の力を借りているのです。このため、インスタンスを作ると、OSのメモリを余計に消費してしまいます。そこで、「getGraphicsGraphicsを取り出したときには、使い終わったらdisposeしておく」というのが、いわばマナーになっています。


プロフィール
掌田 津耶乃 ショウダ ツヤノ

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆活動をする傍ら、ログハウスの普及活動にいそしんでいる。(掌田津耶乃のWebサイトはこちら

※現在、新しいQ&A?サイト「FinQ」を開発、ベータ公開中。また新しい入門記事の投稿サイト「libro」を開発、ベータ公開中。皆さん、ぜひご参加ください!


注目の求人情報
コンサルタント/ITコンサルティング会社
BI(ビジネスインテリジェンス)、DWH(データウエアハウス)システムに関わるシステム企画、要件定義、設計...
コンサルタント/国内大手シンクタンク
業務コンサルティング及びITコンサルティング
コンサルタント/ウルシステムズ株式会社
・クライアントへのインタビュー,観察調査,資料調査などにより、対象業務・課題の可視化・優先度付け...

(最新日付順)
名前(ゲストの方もコメントをどうぞ):*
アイコン:
なし

内容(テキストのみ1200文字まで):*

投稿規定に同意して

スポンサーサイト

この記事のトラックバックURL: