Document

Applet アプレット
◇アプレット<イベント>◇
◇ 準備

フォルダ名
Applet2
mkdir Applet2

ソースのコピー元
cp ~toshiki0909/Java/Applet2/* .
cp ~onionsong/Java/Applet2/* .

シンボリックリンク作成
cd ~/public_html
ln –s ~/Java/Applet2 .
↑(小文字のLです)
1,Appletの復習

アプレットとはwwwブラウザから直接実行で
きる形式のプログラム

実行方法は二つ


ブラウザから呼び出す
コマンドラインで直接(デバックなどに有効)
1,MouseEvent マウスクリック

MouseEvent


マウスの動きに関したイベント
MouseListener

下記のイベントを受け取るためのリスナーインタフェース

mousePressed


mouseReleased


マウスボタンが押されてから離されると発生
mouseEntered


マウスボタンが離されると発生
mouseClicked


マウスボタンが押されると発生
マウスがコンポーネント領域に入ると発生
mouseExited

マウスがコンポーネント領域から出ると発生
◇ Pacman.java

マウスクリックした位置にパックマンを表示
1 import java.applet.*;
2 import java.awt.*;
3 import java.awt.event.*;
4
5 public class Pacman extends Applet
6 implements MouseListener {
7
int x, y;
8
9
public void init() {
10
x = 50; y = 50;
11
addMouseListener(this);
12
}
13
public void paint(Graphics g) {
14
g.setColor(Color.green);
15
g.fillArc(x - 10, y - 10, 20, 20, 30,
300);
16
}
17 }
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public void mouseClicked(MouseEvent
e) {
x = e.getX();
y = e.getY();
repaint();
}
public void mouseEntered(MouseEvent
e) {
}
public void
mouseReleased(MouseEvent e) {
}
public void mouseExited(MouseEvent e)
{
}
public void mousePressed(MouseEvent
e) {
}
}
◇ Pacman.java解説

9
public void init()



変数などの部品の初期値を入れて定義
プログラムの前準備
11 addMouseListener(this)

addMouseListner メソッドを()内のthisによってPacmanクラスに
設定し、関連するマウスイベントを受け取るように登録されている
すべてのMouseListenerオブジェクトまたは MouseAdapter オブジェ
クトに渡される
◇ Pacman.java(続き)

23~30行目の定義は必要なのか?

結論:必要!ないとエラーが出る

インターフェース


メソッドのないクラスの定義。定数の定義やメソッドの宣言(中身なし)
からなっている。MouseEventを扱うために定義しなければならない
メソッドをすべて宣言しておけば、実行時にメソッドが不足することを
コンパイル時に検出できる。
implement

そのクラスで利用するインターフェースを指定することをインター
フェースを実装する(implement)という
◎ 演習1:Pacman2.java

Pacman.javaを元にして,マウスを押している間はピンク,マ
ウスを離したら赤で移動するPacman2.javaを書け.

ヒント

mouseClickedは押されてから離されると起動


色の塗り替えはsetColor()メソッド


引数はColorオブジェクト・・・例:setColor(Color.red)
setColor()メソッドを使うときはg.setColor()で塗る場所指定


今回必要なイベントは?
(Graphics g)の設定はpaintメソッドで指定されているからそのまま別の
メソッドでは使えないが?
色を扱う型はColorを用いて Color xxx;
xxx = Color.red;
これでXXXに色の値が格納されます。
◎ 演習1:解答例
18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Pacman2 extends Applet
implements MouseListener {
int x, y;
Color clr;
public void init() {
x = 50; y = 50;
addMouseListener(this);
}
public void paint(Graphics g) {
g.setColor(clr);
g.fillArc(x - 10, y - 10, 20, 20, 30,
300);
17 }
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 }
public void mouseClicked(MouseEvent e) {
x = e.getX();
y = e.getY();
repaint();
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseReleased(MouseEvent
e) {
clr = Color.red;
repaint();
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e)
{
clr = Color.pink;
repaint();
}
2,MouseMotion
マウスの動きのイベント
 MouseMotionListener
 下記のイベントを受け取るためのリスナーインタ
フェース

mouseDragged


コンポーネント上でマウスボタンが押された後ドラッグされたとき
に呼び出される
mouseMoved
コンポーネント上でマウスが移動される(ボタンは押されない)と
呼び出される
コンポーネントとはそれ単体では機能しないが組み合わせること
で機能を発揮するもの。(プログラムの部品みたいな?)

◇ Draw.java

マウスの動きに合わせて線を引く
1 import java.applet.*;
2 import java.awt.*;
3 import java.awt.event.*;
4
5 public class Draw extends Applet
6 implements MouseMotionListener {
7
int x, y;
8
Color c;
9
Graphics g;
10
11
public void init() {
12
x = 50; y = 50;
13
c = Color.green;
14
addMouseMotionListener(this);
15
g = getGraphics();
16
}
17 public void paint(Graphics g) {
18 }
19 public void mouseDragged(MouseEvent
e){
20 }
21 public void mouseMoved(MouseEvent e){
22
int x2 = e.getX();
23
int y2 = e.getY();
24
g.drawLine(x, y, x2, y2);
25
x = x2;
26
y = y2;
27 }
28 }
◇ Draw.java解説

14 addMouseMotionListener(this);


15 g = getGraphics();


Pacman.javaのときと同様にthisによって自分のいるDrawクラスに設定
し、MouseMotionというイベントをキャッチする
コンポーネントのGraphicsコンテキストを作成する
24 g.drawLine(x, y, x2, y2);

Graphicsオブジェクトが設定されているのは17~18行目のpaintメソッド。
よってmouseMovedイベントでは変数gはそのままでは使用できない
インスタンス変数の使用
◇ インスタンス変数

インスタンス変数




クラスの中で定義されたすべてのメソッドから参照するこ
とができる
あるクラスのインスタンスが存在し続ける間、情報を保持
し続ける変数
Draw.javaのx,y,cなどがインスタンス変数
ローカル変数



メソッド内で定義してその中でのみ通用する変数
メソッドの実行が終われば消えてしまう
Draw.javaのx2,y2などがローカル変数
◎ 演習2:一筆書き講座

Draw.javaを改良して,次のようにマウスの左ボ
タンを押している間だけ先が引ける Draw2.java
を書け.
◎ 演習2:解答
1 import java.applet.*;
2 import java.awt.*;
3 import java.awt.event.*;
4 public class Draw2 extends Applet
5 implements MouseMotionListener {
6
int x, y;
7
Graphics g;
8
9
public void init() {
10
x = 50; y = 50;
11
addMouseMotionListener(this);
12
g = getGraphics();
13
}
14 public void paint(Graphics g) {
15 }
16
17 public void mouseDragged(MouseEvent e){
18
int x2 = e.getX();
19
int y2 = e.getY();
20
g.drawLine(x, y, x2, y2);
21
x = x2;
22
y = y2;
23
}
24
public void mouseMoved(MouseEvent e){
25
}
26 }
3,Keyイベント
 キーボードから何かキーを押したときにそ
れに応じたアクションを起こすイベント
(Aが押されたらAが表示されるなど。)
Key.javaの確認
Key.javaをコンパイルしてどのような実行結
果になるのか確認してみてください。