////////////////////////////////////////////////////////////////////////////////
//  << j345c.java >>
//
//  アプレット(4):イベント処理(キー操作、KeyAdapterクラス、匿名クラス)
//
// ●操作
//  押されたキーを文字列として表示する。
//
// ●イベント処理
//  イベントソース: キー操作
//  イベントクラス: KeyEventクラス
//  イベントリスナ: KeyAdapterクラスを拡張したクラス
//
// ●匿名クラス
//    内部クラスに名前を付けるのは煩雑である。そこで、名前を付けずに内部クラスを
//  使える方法が考えられた。
//
//      new 親クラス名(引数) {
//          処理                
//        }                     
//
//  ・コンパイルされると、2つのクラスファイルが作成される。
//   j345c.class, j345c$1.class
//
////////////////////////////////////////////////////////////////////////////////

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

public class j345c extends Applet {

  Font f;
  String s = "";

  public void init() {

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

    // フォントの設定。
    f = new Font("Courier", Font.BOLD, 48);

    // イベントリスナの定義(匿名クラス)。
    KeyAdapter ka = new KeyAdapter() {
      // keyTypedメソッドの定義。                    
      public void keyTyped(KeyEvent e) {
        s = s + e.getKeyChar();
        repaint(); // 再描画。
      }                                              
    };                                              

    // イベントリスナーの登録。
    this.addKeyListener(ka);

    // アプレットにフォーカスを与える。
    this.requestFocusInWindow();

  }

  public void paint(Graphics g) {
    g.setColor(Color.green);
    g.setFont(f);
    g.drawString(s,50,50);
  }

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