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


public class KeyEventDemo extends Applet 
  implements KeyListener {

  TextField zoneSource;
  TextArea zoneTexte;
  final static String newline = System.getProperty("line.separator");
  
  public void init() {
    setLayout(new BorderLayout());
    
    zoneSource = new TextField(20);
    zoneSource.setEditable(true);
    add("Center", zoneSource);
    
    zoneTexte = new TextArea(15, 20);
    zoneTexte.setEditable(false);
    add("South", zoneTexte);
    // enregistrement comme recepteur des événements clavier
    // de source zoneSource
    zoneSource.addKeyListener(this);
  }

  public void keyTyped(KeyEvent e) {
    zoneTexte.append("KEY TYPED: ");
    keyDisplay(e);
  }
  
  public void keyPressed(KeyEvent e) {
    zoneTexte.append("KEY PRESSED: ");
    keyDisplay(e);
}

  public void keyReleased(KeyEvent e) {
    zoneTexte.append("KEY RELEASED: ");
    keyDisplay(e);
}

  protected void keyDisplay(KeyEvent e){
    String charString, keyCodeString, modString, tmpString;
    char c = e.getKeyChar();
    int keyCode = e.getKeyCode();
    int modifiers = e.getModifiers();
    
    if (Character.isISOControl(c)) {
      charString = "caractère = [non-impr.]";
    } else {
      charString = "caractère = '" + c + "'";
    }
    
    keyCodeString = "code = " + keyCode
      + " ("
      + KeyEvent.getKeyText(keyCode)
	+ ")";
      
      modString = "modif. = " + modifiers;
      tmpString = KeyEvent.getKeyModifiersText(modifiers);
      if (tmpString.length() > 0) {
	modString += " (" + tmpString + ")";
      } else {
	modString += " ()";
      }
      
      zoneTexte.append("\n"
		       + charString 
		       + ", "
		       +  keyCodeString
		       +  ", "
		       + modString
		       + "\n");
      zoneTexte.setCaretPosition(Integer.MAX_VALUE);
  }
}

