KeyTest.java



/** キーボード入力の実験を行う KeyTestクラス */
import java.awt.*;
import java.awt.event.*;
public class KeyTest extends Canvas
    implements MouseListener, KeyListener, FocusListener {

 /** 押されたキーの文字を記憶するためのバッファ */
    public StringBuffer buf = null;

 /** キーボードフォーカスがあるかどうかを示すフラグ */
    public boolean focusFlag = false;

 /** フォント */
    public Font font;

 /** フォントメトリックス */
    private FontMetrics fm;

 /** 文字を描く位置 */
    public int x, y;

 /** コンストラクタ */
    public KeyTest() {
        super();
        buf = new StringBuffer( " " );
        font = new Font( "TimesRoman", Font.BOLD, 72 );
        fm = getFontMetrics( font );
        int w = fm.getMaxAdvance() + 16;
        int h = fm.getAscent() + fm.getDescent() + 16;
        setSize( w, h );
        y = fm.getAscent() + 8;
        addMouseListener( this );  //自分自身を登録
        addKeyListener( this );    //自分自身を登録
        addFocusListener( this );  //自分自身を登録
    }

 /** グラフィックを描くメソッド */
    public void paint( Graphics g ) {
        g.setColor( Color.lightGray );
        if( focusFlag == false ) {   // キーボードフォーカスがない
            g.fill3DRect( 1, 1, getSize().width-2,
                          getSize().height-2, false ); // 暗い表示
        }
        else {   // キーボードフォーカスがある
            g.fill3DRect( 1, 1, getSize().width-2,
                          getSize().height-2, true ); // ハイライト表示
        }
        g.setColor( Color.black );
        g.setFont( font );
        int w = fm.charWidth( buf.charAt(0) );
        x = ( getSize().width - w )/2;
        g.drawString( buf.toString(), x, y ); // 文字を描く
    }

 /** キー入力が行われた時に自動的に呼び出される */
    public void keyTyped( KeyEvent evt ) {
        buf.setCharAt( 0, evt.getKeyChar() ); // 入力された文字をbufに記憶
        repaint();  // paint() を呼び出す
    }

 /** キーが押された時に自動的に呼び出される */
    public void keyPressed( KeyEvent evt ) {
    }

 /** キーが放された時に自動的に呼び出される */
    public void keyReleased( KeyEvent evt ) {
    }

 /** キーボードフォーカスを得た時に自動的に呼び出される */
    public void focusGained( FocusEvent evt ) {
        focusFlag = true;
        repaint();  // paint() を呼び出す
    }

 /** キーボードフォーカスを失った時に自動的に呼び出される */
    public void focusLost( FocusEvent evt ) {
        focusFlag = false;
        repaint();  // paint() を呼び出す
    }

 /** マウスカーソルが入った時に自動的に呼び出される */
    public void mouseEntered( MouseEvent evt ) {
        requestFocus();  // キーボードフォーカスを要求
    }

 /** マウスカーソルが出た時に自動的に呼び出される */
    public void mouseExited( MouseEvent evt ) {
    }

 /** マウスボタンがクリックされた時に自動的に呼び出される */
    public void mouseClicked( MouseEvent evt ) {
    }

 /** マウスボタンが押し込まれた時に自動的に呼び出される */
    public void mousePressed( MouseEvent evt ) {
    }

 /** マウスボタンが放された時に自動的に呼び出される */
    public void mouseReleased( MouseEvent evt ) {
    }

 /** 最初に呼び出されるメソッド */
    public static void main( String argv[] ) {
        KeyTest canvas1 = new KeyTest();
        KeyTest canvas2 = new KeyTest();
        KeyTest canvas3 = new KeyTest();
        Frame frame = new Frame( "Key Event Test" );
        frame.add( canvas1, "West" );
        frame.add( canvas2, "Center" );
        frame.add( canvas3, "East" );
        frame.pack();
        frame.setVisible( true );
    }
}