アプレット

ここまでは,コンソールアプリケーションについて学んできました.ここからは,アプレット(applet)を作成して利用する方法を学習します.アプレットとは,Webブラウザまたはアプレットビューアなどのツールで実行される小さなプログラムのことです.アプレットビューアはJava Development Kit(JDK)に付属しています.

この章では,java.awtパッケージのクラスを使って文字列,図形,イメージを表示する簡単なアプレットの作り方を学びます.このパッケージには,さまざまなカラーやフォントを扱うクラスも用意されています.

最初のJavaアプレット

アプレットのソースプログラムは,アプレット対応形式にする必要があります.全てのアプレットの基本クラスはjava.applet.Appletクラスです.この基本クラスを継承して,アプレットを作成するので,アプレットの基本スタイルは,次のようになります.
import java.applet.Applet;
import java.awt.Graphics;
public class アプレット名 extends Applet
{
//メソッド
}
このソースプログラムをアプレット名.javaという名前で保存します.ここで,java.awt.Graphicsクラスがインポートされているのは,アプレットでは,一般に画面に文字列や図形などを表示するので,文字を ここで,例えばアプレットで文字列を表示したい場合,メソッドは,
public void paint(Graphics g)
{
g.drawString("表示したい文字列",20,100);
}
のようになります.ここで,20と100は画面上のxとy座標を表します.

このようにして作成したアプレットをコンソールアプリケーションと同様にjavacでコンパイルすると,アプレット名.classというクラスファイルが作成されます.このクラスファイルはWebブラウザ上で動作させることになります.したがって,Webブラウザ上で表示させるためのHTMLファイルが必要となります.HTMLファイルには最小限,以下の事柄を記述する必要があります.

Javaアプレットを起動するHTMLプログラム
$<$HTML$>$
$<$BODY$>$
$<$APPLET code="アプレット名.class" WIDTH=250 HEIGHT=250$>$
$<$/APPLET$>$
$<$/BODY$>$
$<$/HTML$>$

例題 12..1   最初のJavaアプレット
\framebox{
\begin{minipage}{13.65cm}
{\rm ''Hello World''と表示するアプレットを作成しなさい.}
\end{minipage}}

import java.applet.Applet;
import java.awt.Graphics;

public class GreetingApplet extends Applet
{
  public void paint(Graphics g)
  {
    g.drawString("Hello World", 50, 100);
  }
}

実行結果

\begin{figure}\centering
\includegraphics[width=5.5cm]{JAVAFIG/GreetingApplet.eps}
\end{figure}

このソースコードを詳しく見ていきます.

1行目ではjava.applet.Appletクラス,2行目ではjava.awt.Graphicsクラスをインポートしています.Appletクラスは,すべてのアプレットの基本クラスです.Graphicsクラスは,AWT(Abstract Window ToolKit)によって提供されます.4行目では,GreetingAppletクラスがAppletクラスから派生することを示しています.次に,paint()というメソッドを定義します.このメソッドの役目は,アプレットの出力を生成することです.paint()はGraphicsオブジェクトを引数として受け取ります.文字列を実際に表示するのは,GraphicsオブジェクトのdrawString()メソッドです.このメソッドの1つ目の引数は,表示する文字列です,2つ目と2つ目の引数で,文字列の表示を開始する位置を指定します.

練習問題 12..1  
g.drawLine(x1,y1,x2,y2);を用いて点(10,10)と点(100,100)を結ぶ線を描画するアプレットを作成しなさい.

Graphicsクラス

上の例題でjava.awt.Graphicsクラスの機能を利用しました.ここでは,このクラスについてより詳しく学びます.

Graphicsオブジェクトには,グラフィックスを出力するメソッド群がカプセル化されています.線(Line),楕円(Oval),四角形(Rectangle),多角形(Polygon),文字列(String),イメージ(Image),文字(Chars),弧(Arc)を描画することができます.

Graphicsクラスの主なインスタンスメソッド
void drawArc(int x, int y, int w, int h, 座標x,yに左上隅が配置されるように幅w,
int startAngle, int arcAngle) 高さhの矩形に接する円弧を描く
  startAngleで開始角度を指定し
  arcAngleで弧の展開角度を指定する
void drawImage(Image img, int x, int y, 座標x,yに左上隅が配置されるように
ImageObserver io) imgを描画する.座標処理の進行状況は,
  ioに送られる
void drawLine(int x0,int y0, int x1, int y1) 座標x0,y0とx1,y1を結ぶ線を描画する
void drawOval(int x, int y, int w, int h) 座標x,yに左上隅が配置される幅w
  高さhの四角形に接する楕円を描く
void drawPolygon(int[] x, int[] y, int n) n個の頂点を持つ多角形を描画する.
  頂点の座標は,配列xとyの要素と
  して引き渡す.
void drawPolyline(int[] x, int[] y, int n) n個の頂点を持つ多角線を描画する.
  頂点の座標は,配列xとyの要素と
  して引き渡す.
void drawRect(int x, int y, int w, int h) 座標x,yに左上隅が配置される幅w,
  高さhの四角形を描画する
void drawString(String str, int x, int y) strを座標x,yに描画する
void fillArc(int x, int y, int w, int h, 座標x,yに左上隅が配置されるように幅w,
int startAngle, int arcAngle) 高さhの矩形に接する円弧を
  startAngleで開始角度を指定し
  arcAngleで弧の展開角度を指定し
  塗りつぶす
void fillOval(int x, int y, int w, int h) 座標x,yに左上隅が配置される幅w
  高さhの四角形に接する楕円を塗りつぶす
void fillPolygon(int[] x, int[] y, int n) n個の頂点を持つ多角形を塗りつぶす.
  頂点の座標は,配列xとyの要素と
  して引き渡す.
void fillRect(int x, int y, int w, int h) 座標x,yに左上隅が配置される幅w,
  高さhの四角形を塗りつぶす
Color getColor() 現在のオブジェクトのカラーを取得する
Font getFont() 現在のオブジェクトのフォントを取得する
FontMetrics getFontMetrics() 現在のオブジェクトのフォント
  メトリックスを取得
void setColor(Color c) グラフィックコンテキストの現在のカラー
  としてcを設定
void setFont(Font f) 現在のオブジェクトのフォントとしてfを
  設定

例題 12..2   Graphicsクラス
\framebox{
\begin{minipage}{13.65cm}
{\rm 座標30,30に幅80高さ50の四角形,座標120,30に長軸50,短軸50...
...0,高さ50に接する0〜135°の弧およびこれらをy軸方向に70平行移動し塗りつぶした図形を描画するアプレットを作成しなさい.}
\end{minipage}}

import java.applet.Applet;
import java.awt.Graphics;

public class FirstShapes extends Applet
{
  public void paint(Graphics g)
  {
    g.drawRect(30,30,80,50);
    g.drawOval(120,30,50,50);
    g.drawArc(180,30,50,50,0,135);
    g.fillRect(30,100,80,50);
    g.fillOval(120,100,50,50);
    g.fillArc(180,100,50,50,0,135);
  }
}

実行結果

\begin{figure}\centering
\includegraphics[width=6.5cm]{JAVAFIG/FirstShapes.eps}
\end{figure}

Colorクラス

java.awt.Colorクラスを用いて描画と背景に色を使うことができます.使用頻度の高い色はColorオブジェクトとしてフィールド値が用意してあります.次の13色です.

black blue cyan darkGray
gray green lightGray magenta
orange pink red white
yellow      

これらを用いるには
g.setColor(Color.blue);
のように用います.

次に,赤,緑,青の3色を混合させたRGBモデルで色をしてすることができます.
g.setColor(new Color(255,0,0);
で赤色を指定することができます.

Colorオブジェクトには,色に関するメソッド群がカプセル化されています.

Colorクラスの主なインスタンスメソッド
static int HSBtoRGB(float h, float s, float b) h,s,bで指定された色相,彩度,明度を
  int型の値にコード化して返す
static int RGBtoHSB(float h, float s, float b) r,g,bで指定されたred,green,blueの要素
  からなるカラーを色相,彩度,明度の
  float型配列に変換して返す
Color brighter() 現在のオブジェクトの色を明るくした
  オブジェクトを返す
Color darker() 現在のオブジェクトの色を暗くした
  オブジェクトを返す
int getBlue() 現在のオブジェクトのブルー値を返す
int getGreen() 現在のオブジェクトのグリーン値を返す
int getRGB() 現在のオブジェクトのRGB値を返す
int getRed() 現在のオブジェクトのレッド値を返す

練習問題 12..2  
座標30,30に幅80高さ50の四角形,座標120,30に長軸50,短軸50の楕円,座標180,30に幅50,高さ50に接する0〜135°の弧およびこれらをy軸方向に70平行移動し青く塗りつぶした図形を描画するアプレットを作成しなさい.

テキストの表示

drawString()メソッドを用いて文字列を表示する方法はすでに学びました.