frameの準備

フレームを表示する

フレーム=枠のことです。ウィンドウズの枠と同じような感じです。枠を作って枠の中にテキストを表示したり、絵を描くにも枠を作るところから始めます。
最初は、次のように作ってみました。
"MainHello"というクラスファイルを作り、そこでフレームを表示させています。


import javax.swing.JFrame;

public class MainHello {
	public static void main(String[] args) {
		System.out.println("Hello, World!");	//この行いらないけど
		JFrame mframe = new JFrame("ここがタイトルになる");   // フレーム(枠)を作る
		mframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	// 閉じるボタンの処理
			//これを忘れると、フレームを閉じることができない。
		mframe.setBounds(100, 100, 400, 300);	// x,yとフレームの大きさを設定
		mframe.setLocationRelativeTo(null);	// フレームを中央に表示
		mframe.setVisible(true);     // フレームを表示
	}
}

 なんか見たこともないメソッドが色々出てきてびっくりしたかもしれませんが、set・・のそれぞれの意味はネットなんかで調べてみてください。


クラスファイルに分割する

hello

 実行すると右図のようになります。フレーム(枠)はできましたけど・・・
みたいなことで、次のステップに進みます。

 今の例のように、mainクラスにプログラムを全部書いてもいいのですが、将来の汎用性のために、分割して作ってみます。昔でいうサブルーチンみたいなことです。
最初はmainのクラスファイル。ファイル名に大文字でMainという名称を付け足しています。これはクラスファイルが増えてくると、どこにmainメソッドがあるのか分からなくなるので、例によって独断で勝手に付けています。


public class MainTestFrm01 {
	public static void main(String[] args){
		
		 System.out.println("Hello, World!");	 //この行いらないけど 
		 /* サブルーチンの練習 * インスタンスの生成から * */
		 LogField log = LogField.getInstance(); 
		 // ↑ここではnewしない 
	}
}

  mainは、LogField log = LogField.getInstance(); だけにしました。
("log"は使わないけど、将来使うので、このままにしている。)
ここで、getInstance();という方法を使っています。ログ出力などでは他のクラスファイルからもこのLogField()ファイルを呼び出して同じフレームに追加してログを出力することもあるからです。一つのサブルーチンを他でも使うための手法です。
ここでnewしてLogField()サブルーチンを作ると、他から呼び出すのが面倒になる。
他のクラスファイルからこのLogField()ファイルを呼び出す例は後でやってみます。
 とかなんとか説明不足の分からんことを書いてしまったけど、ここはなんか動作させてみることが主題だと思って受け流してください。
続いてLogField()は、次のように書いてみます。


public class LogField {
	static String title="仮のタイトル";

	  private static LogField insta = new LogField();	  // privateがみそ ここにだけnew
	  private LogFrame frame;	// LogFrame というフレームを表示するクラス

	  private LogField() {
		  frame = new LogFrame(title);	  //フレームを作る
	  }
		
	public static LogField getInstance() {	  // インスタンス取得メソッド ここはpublic
		return insta;
	}
}

LogField()を中継して、LogFrame()でフレームを作ります。ここでだけLogFrame()をnewします。
他のクラスファイルからは、LogField()を中継してフレームを利用するので、newを気にすることはありません。
newすると、newしたプログラムだけが設定を継続できます。他のプログラムが同じ設定を引き続き使おうとするとうまくできません。他のプログラムがnewするとそれは新たな設定となりnewしたプログラムだけが設定を引き継げます。
うまく表現できませんね。そもそも私自身がnewをよく分からずに作っているからです。
もう少しフレームの作り方を練習してから例を紹介します。

次は、LogFrame というクラスです。フレームを作って枠を表示します。


import javax.swing.JFrame;

public class LogFrame {
	
	public LogFrame(String title) {
		System.out.println("Hello world!2");	// 不要な行です
		JFrame mframe = new JFrame(title);	  // フレーム(枠)を作る タイトルは受け渡し
	    mframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	    // 閉じるボタンの処理
	    mframe.setBounds(100, 100, 400, 300);	    // x,yとフレームの大きさを設定
	    mframe.setLocationRelativeTo(null);	    // フレームを中央に表示
	    mframe.setVisible(true);     // フレームを表示
	}
}

  以上で、フレームを表示するまでの、3つのクラスファイルができました。
実行してみると、最初にmainだけのクラスファイルを実行したときの表示と同じです。当たり前ですね。mainを分割しただけですから。
 フレームだけでは何もできないので、次はフレームの中に部品を配置します。