ReverseName.java



/** マウスの操作で表示が反転する ReverseName クラス */
import java.awt.*;
import java.awt.event.*;
public class ReverseName extends Canvas {

 /** 表示する文字列 */
    public String name = "Fujio Maruyama";  // 自分の名前にしなさい

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

 /** 文字の先頭の位置 */
    public int x, y;

 /** マウスポインタが内部にあるかどうかを示すフラグ */
    public boolean stateFlag = false;

 /** コンストラクタ */
    public ReverseName() {
        super();
        font = new Font( "TimesRoman", Font.ITALIC, 72 );
        FontMetrics fm = getFontMetrics( font );
        int w = fm.stringWidth( name ) + 10;
        int h = fm.getAscent() + fm.getDescent() + 4;
        setSize( w, h );
        x = 5;
        y = fm.getAscent() + 2;
        InOutAdapter adapter = new InOutAdapter();
        addMouseListener( adapter );  // アダプタの登録
    }

 /** 描画のメソッド */
    public void paint( Graphics g ) {
        if( stateFlag == false ) {  // マウスポインタが外にある
            g.setFont( font );
            g.setColor( Color.yellow );
            g.fill3DRect( 1, 1, getSize().width-2, 
                          getSize().height-2, false );
            g.setColor( Color.blue );
            g.drawString( name, x, y );
         }
         else {                     // マウスポインタが中にある
            g.setFont( font );
            g.setColor( Color.blue );
            g.fill3DRect( 1, 1, getSize().width-2, 
                          getSize().height-2, true );
            g.setColor( Color.yellow );
            g.drawString( name, x, y );
         }
    }

 /** マウスポインタの出入りに伴う処理を実行する innerクラス */
   class InOutAdapter extends MouseAdapter {

   /** マウスポインタが入った時に自動的に呼び出される */
        public void mouseEntered( MouseEvent evt ) {
            stateFlag = true;
            repaint(); // paint() を呼び出す
        }

   /** マウスポインタが外に出た時に自動的に呼び出される */
        public void mouseExited( MouseEvent evt ) {
            stateFlag = false;
            repaint(); // paint() を呼び出す
        }
    }  // InOutAdapterクラスの定義の終わり

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