////////////////////////////////////////////////////////////////////////////////
//  << j344b.java >>
//
//  アプレット(4):イベント処理(マウス操作、MouseMotionAdapterクラス、内部クラス)
//
// ●操作
//  マウスをドラッグして曲線を描く。
//    ・repaintメソッドから呼び出されるupdateメソッドをオーバーライドする。
//   すなわち、以前に描画した文字や図形を消去しないようにする。
//
// ●イベント処理
//  イベントソース: マウス
//  イベントクラス: MouseEventクラス
//  イベントリスナ: MouseMotionAdapterクラスを拡張したクラス
//
//  ●MouseMotionAdapterクラス
//  MouseMotionListenerインターフェースに対応するアダプタクラス。
//
////////////////////////////////////////////////////////////////////////////////

import java.applet.Applet; 
import java.awt.*; 
import java.awt.event.*;     

public class j344b extends Applet {

  int Px=0,Py=0; // マウスの直前の位置。
  int Cx,Cy;     // マウスの現在の位置。
 
  public void init() {

    // アプレットの背景色を灰色に設定。
    this.setBackground(Color.lightGray);

    // イベントリスナの作成。
    EventListener el = new EventListener();

    // イベントリスナの登録。
    this.addMouseMotionListener(el);

  }

  public void update(Graphics g) {
    if( (Px == 0)&&(Py == 0) ) { Px = Cx; Py = Cy; }
    g.drawLine(Px,Py,Cx,Cy); // 直線の描画。
    Px = Cx; Py = Cy; // 直前の位置を更新。
  }

  class EventListener extends MouseMotionAdapter {

    public void mouseDragged(MouseEvent e) {
      Cx = e.getX(); // クリックした点のx座標を取得する。 
      Cy = e.getY(); // クリックした点のy座標を取得する。 
      repaint();
    }

    public void mouseMoved(MouseEvent e) { }

  }

}
HTMLファイル
<html>
<head>
  <title>アプレット</title>
</head>
<body bgcolor=white text=black>
<applet code="j344b.class" width="300" height="200">
</applet>
<body>
<html>
実行結果