[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends] Frameクラスで質問
はじめまして。いまいしといいます。
#はじめましてではない方もいらっしゃるようですが。
Frameの使い方を勉強するためにちょっとしたものを
作ったんですが、MENUで「Quit」を選択しても終了
してくれません。
ちょっと長いですが、ソースを添付しますのでアドバイス
頂けたらうれしいです。
-----------------------------------------
import java.awt.*;
/** 数字のボタンを配置する NumberFrame2 クラス */
public class NumberFrame2 extends Frame{
MenuBar mb;
Menu m;
MenuItem mi;
/** 起動時に呼び出されるメソッド */
public static void main( String argv[] ) {
NumberFrame2 window = new NumberFrame2() ;
window.setTitle("Number Frame");
window.pack();
window.show();
}
NumberFrame2(){
int MAX_NUM = 12;
mb=new MenuBar();
m=new Menu("File");
mi=new MenuItem("Quit");
m.add(mi); //メニューにメニューアイテムをつける
mb.add(m); //メニューバーにメニューをつける
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[10] = new NumberButton( canvas, "." );
buttons[11] = new NumberButton( canvas, "=" );
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 );
add( "North", canvas );
panel.resize( 300, 400 );
add( "Center", panel );
setMenuBar(mb);
}
public boolean handleEvent(Event e,Object arg){
if(e.id == Event.WINDOW_DESTROY){
System.exit(0) ;
return (true);
}
if(e.target instanceof MenuItem){
String txt=(String)arg; //型変換
if(txt.equals("Quit")) //もし"Quit"なら終了する
System.exit(0);
return (true);
}
return false;
}
} // NumberFrameクラスの定義の終わり
/** 数字を表示する NumberCavas クラス */
class NumberCanvas extends Canvas {
/** 表示したい文字列を記憶するバッファ */
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() );
}
} // NumberCanvasクラスの定義の終わり
/** 数字を選択する NumberButton クラス */
class NumberButton extends Button {
/** 描画したいキャンバス */
public NumberCanvas canvas;
/** コンストラクタ */
NumberButton( NumberCanvas canvas, String str ){
super( str ); // Button のコンストラクタ
this.canvas = canvas;
}
/** アクション処理のメソッド */
public boolean action( Event event, Object object ) {
canvas.setNumberString( object.toString() );
canvas.repaint();
return true;
}
} // NumberButtonクラスの定義の終わり
-----------------------------------------
i