課題
Report#8:Java Appletプログラミング{〜2/9(Mon)} * Java Applet/AWTについて学び、Java Appletのオリジナルプログラムを作成し解説せよ。


マウスの周りをスポットライトのように画像を表示し、クリックすると音が出るアプレット。

プログラム------------------------------------------------------
import java.applet.*;          -----------------------------(1)
import java.awt.*;
import java.awt.event.*;
import java.awt.Image.*;
import java.applet.AudioClip;

public class Clip16 extends Applet implements MouseMotionListener ,      MouseListener       -------------(2)
{
  Image    himage;                //背景イメージ
  Graphics hga;                     //背景画像
  Image    uimage;		//裏画像イメージ
  Graphics uga;			//裏画像

  int h = 360;                        //高さ
  int ha   = 400;		//幅

  int ch = 50;			//クリップ高さ
  int cha   = 50;		//クリップ幅
  int cx = cha   * -1;		//クリップx軸開始位置
  int cy = ch * -1;		//クリップy軸開始位置
  
  private AudioClip ac;                   ---------------(3)
  
  public void init() {                   ---------------(4)

    /* マウスの動きをアプレット自身が捕捉する */
    this.addMouseMotionListener(this);
    this.addMouseListener(this);
	
    //AudioClip ac へ参照を代入
    ac = getAudioClip(getDocumentBase(), "ban.au");
    
	/* 裏画面の準備 */                    -----------------(5)
    uimage   = createImage(ha,h);
    uga = uimage.getGraphics();
    uga.setColor(Color.black);
    uga.fillRect(0,0,ha,h);

    /* 背景画像の準備 */
    himage   = createImage(ha,h);
    himage =getImage(getDocumentBase(),"Image.jpg");
}
  /*ちらつき防止*/                      ----------------(6)
   public void update(Graphics k) {
    paint(k);
  }
  public void paint(Graphics k) {
    k.drawImage(uimage,0,0,this);
  }
  
   /* コンポーネント上でマウスがドラッグされたときに呼び出される */    -----(7)
  public void mouseDragged(MouseEvent e) {
    doAction2(e);
  }

  /* コンポーネント上でマウスが移動すると呼び出される */
  public void mouseMoved(MouseEvent e) {
    doAction2(e);
  }
  public void mouseClicked(MouseEvent e)
	{
	//AudioCliip ac の再生
		ac.play();
	}
  public void mouseEntered(MouseEvent e)
	{
	}
  public void mouseExited(MouseEvent e)
	{
	}
  public void mousePressed(MouseEvent e)
	{
	}
  public void mouseReleased(MouseEvent e)
	{
	}
  public void doAction2(MouseEvent e) {         -----------(8)

    /* 裏画面の描画 */
    uga.setColor(Color.black);
    uga.fillRect(0,0,ha,h);
    cx = e.getX()-(cha/2);
    cy = e.getY()-(ch/2);
    uga.setClip(cx,
                   cy,
                   cha,
                   ch);
    uga.drawImage(himage,0,0,this);
    
    uga.drawLine(cx+25,cy+22,cx+25,cy+28);     ----------(9)
    uga.drawLine(cx+22,cy+25,cx+28,cy+25);
    uga.drawOval(cx+20,cy+20,10,10);
    uga.drawOval(cx+16,cy+16,18,18);
    uga.drawOval(cx+11,cy+11,28,28);
    uga.drawLine(cx+25,cy+19,cx+25,cy+11);
    uga.drawLine(cx+25,cy+31,cx+25,cy+39);
    uga.drawLine(cx+19,cy+25,cx+11,cy+25);
    uga.drawLine(cx+31,cy+25,cx+39,cy+25);
    /* アプレットの描画 */
    repaint();
  }
}


-----------------------------------------------------------  
実行結果



考察
(1)
いままでアプレットを作る時と同じでimportしていく。
AudioClip
音を出すためのもの
(2)
MouseMotionListenerとMouseListenerインターフェイスを実装
(3)
フィールドとしてAudioClipを定義
(4)
init
 アプレットの起動時に一回だけ起動する
イベントを受け取る準備をする。
ac = getAudioClip(getDocumentBase(), "ban.au");
音声ファイル"ban.au"をオブジェクトとして取得
(5)
裏画像を準備します。サイズと黒い背景をとりあえず作る。
背景画像を作成します。画像ファイル"Image.jpg"をはりつける。
(6)
ちらつきを防止するらしいです。
(7)
マウスの行動の処理。
  マウスを動かした時
  マウスをドラッグした時
doAction2(MouseEvent e) (8)以降を実行。
マウスをクリックした時
  AudioClip acの再生をする。

AudioClipインターフェースの音声データの操作用の3つのメソッド
voidloop() オーディオクリップを繰り返して再生します。
voidplay() オーディオクリップの再生を開始します。
voidstop() オーディオクリップを停止します。

(8)
 マウスを動かした時、ドラッグした時の処理
裏画像を作ります。
cxとcyの座標をとる。
マウスの位置からクリップの幅、高さを半分にした物を引く。
setClip(x,y,width,height)
指定した座標が指定した矩形に現在のクリップを設定する。
drawImage
指定されたイメージの指定された領域の利用可能な部分を描きます。指定された領域の内部に収まるようにスケーリングして描きます。
(9)
マウスの真ん中にある模様
repaint
指定された矩形領域を再描画します。


感想
最後の課題ということだったけども、結局クリップについてはよくわからなかった。
参考
やさしいjava
Java 2 Platform SE 1.3
おじゃば★じゃば