[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