課題
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つのメソッド
void | loop() |
オーディオクリップを繰り返して再生します。 |
void | play() |
オーディオクリップの再生を開始します。 |
void | stop() |
オーディオクリップを停止します。 |
(8)
マウスを動かした時、ドラッグした時の処理
裏画像を作ります。
cxとcyの座標をとる。
マウスの位置からクリップの幅、高さを半分にした物を引く。
setClip(x,y,width,height)
指定した座標が指定した矩形に現在のクリップを設定する。
drawImage
指定されたイメージの指定された領域の利用可能な部分を描きます。指定された領域の内部に収まるようにスケーリングして描きます。
(9)
マウスの真ん中にある模様
repaint
指定された矩形領域を再描画します。
感想
最後の課題ということだったけども、結局クリップについてはよくわからなかった。
参考
やさしいjava
Java 2 Platform SE 1.3
おじゃば★じゃば