[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: Frameクラスで質問



お待たせしました。JDK 1.2 RC1 (Windows95) で動作確認してあります。

NumberFrame3.java
==================================================================
import java.awt.*;
import java.awt.event.WindowListener;
import java.awt.event.WindowEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


/** 数字のボタンを配置する NumberFrame3 クラス */
public class NumberFrame3 extends Frame{
  MenuBar mb;
  Menu m;
  MenuItem mi;

    /** 起動時に呼び出されるメソッド */
  public static void main( String[] args ) {
    NumberFrame3 window = new  NumberFrame3();
    window.addWindowListener(new MyWindowAdaptor()); // 1998.11.9 y.e
    window.setTitle("Number Frame");
    window.pack();
    window.show();
  }

  NumberFrame3() {
    final int MAX_NUM = 12;
    mb = new MenuBar();
    m = new Menu("File");
    mi = new MenuItem("Quit");
    mi.addActionListener(new MyMenuAdaptor()); // 1998.11.9 y.e
    m.add(mi);     //メニューにメニューアイテムをつける
    mb.add(m);     //メニューバーにメニューをつける

//  this.addWindowListener(new MyWindowAdaptor()); // 1998.11.9 y.e

    Panel panel = new Panel();                  //パネルの生成
    NumberCanvas canvas = new NumberCanvas();   //キャンバスの生成

    GridLayout lay = new GridLayout( 4, 3 );    //レイアウトの生成
    panel.setLayout( lay );         //レイアウトの設定

    Color color = new Color( 250, 250, 240 );
    Font buttonFont = new Font( "TimesRoman", Font.BOLD, 36 );
    Font canvasFont = new Font( "TimesRoman", Font.PLAIN, 36 );

    panel.setBackground( color );
    canvas.setBackground( Color.black );
    canvas.setFont( canvasFont );

    NumberButton buttons[];
    buttons = new NumberButton[MAX_NUM];     //ボタンの生成
    for( int i=0; i<10; i++ ) {
       buttons[i] =
         new NumberButton( canvas, new Integer(i).toString() );
       buttons[i].addActionListener(
         new MyButtonAdaptor(buttons[i])); // 1998.11.9 y.e
    }
    buttons[10] = new NumberButton( canvas, "." );
    buttons[11] = new NumberButton( canvas, "=" );
    buttons[10].addActionListener(      // 1998.11.9 y.e
      new MyButtonAdaptor(buttons[10]));
    buttons[11].addActionListener(      // 1998.11.9 y.e
      new MyButtonAdaptor(buttons[11]));
    for( int i=0; i<MAX_NUM; i++ ) {
      buttons[i].setBackground( color );
      buttons[i].setForeground( Color.black );
      buttons[i].setFont( buttonFont );
      panel.add( buttons[i] );
    }

    //canvas.resize( 300, 40 ); // 1998.11.9 y.e
    canvas.setSize( 300, 40 );
    add( "North", canvas );
    //panel.resize( 300, 400 ); // 1998.11.9 y.e
    panel.setSize( 300, 400 );
    add( "Center", panel );
    setMenuBar(mb);

  }

} // NumberFrameクラスの定義の終わり

interface NumberSetter {
  public void setNumberString(String str);
  public void repaint();
}

/** 数字を表示する NumberCavas クラス */
class NumberCanvas extends Canvas implements NumberSetter {

  /** 表示したい文字列を記憶するバッファ */
  protected StringBuffer numberString;

  /** コンストラクタ */
  NumberCanvas(){
    super();  // Canvas のコンストラクタ
      numberString = new StringBuffer(" ");
    }

  /** 描画のメソッド */
  public void paint( Graphics g ) {
    g.setColor( Color.green );
    g.drawString( numberString.toString(), 4, 34 );
  }

  /** 文字列の設定のメソッド */
  public void setNumberString( String str ) {
    numberString.insert( 0, str );
    numberString.setLength( str.length() );
  }
  public void repaint() {
    super.repaint();
  }

} // NumberCanvasクラスの定義の終わり

interface ButtonActor {
  public void putNumber();
}

/** 数字を選択する NumberButton クラス */
class NumberButton extends Button implements ButtonActor {

  /** 描画したいキャンバス */
  private NumberSetter canvas;
  
  private String buttonStr;

  /** コンストラクタ */

  NumberButton( NumberSetter canvas, String str ){
    super(str);  // Button のコンストラクタ
    buttonStr = str;
    this.canvas = canvas;
  }

  /** アクション処理のメソッド */
    public void putNumber() {
    canvas.setNumberString(buttonStr);
    canvas.repaint();
  }
} // NumberButtonクラスの定義の終わり

// Windowイベントを処理するクラス
class MyWindowAdaptor implements WindowListener {

  public void windowActivated(WindowEvent e) {
  }
  public void windowOpened(WindowEvent e) {
  }
  public void windowIconified(WindowEvent e) {
  }
  public void windowDeiconified(WindowEvent e) {
  }
  public void windowClosing(WindowEvent e) {
    System.exit(0);
  }
  public void windowDeactivated(WindowEvent e) {
  }
  public void windowClosed(WindowEvent e) {
  }
}

// MenuItem のイベントを処理するクラス
class MyMenuAdaptor implements ActionListener {
  public void actionPerformed(ActionEvent e) {
    System.exit(0);
  }
}

// Button イベントを処理するクラス
class MyButtonAdaptor implements ActionListener {
  private ButtonActor adaptee;

  public MyButtonAdaptor(ButtonActor adaptee) {
    this.adaptee = adaptee;
  } 

  public void actionPerformed(ActionEvent e) {
    adaptee.putNumber();
  }
}
==================================================================
------------------------------------------------------------------
遠藤靖之 (えんどう やすゆき) <yasuyuki@xxxxxxxxxx>
http://www.freepage.total.co.jp/jfriends/ (Java互助会ホームページ)
株式会社タイムインターメディア 情報通信サービス部 TEL 03-5362-9009
〒162-0065 新宿区住吉町3-11 新宿スパイアビル8F    FAX 03-5362-9008