frameに部品を配置する

フレームに部品を配置する

フレーム=枠はできました。フレームにはラベルとかチェックボックスとかの部品を配置できますが、その部品を配置するのに、フレームには、ContentPaneという見えないコンテナがひっついています。このコンテナに部品を入れて、配置して、表示するといったイメージです。ややこい。
以下のように、LogFrameクラスに赤文字を追加しました。



import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JButton;

import javax.swing.JFrame;

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



hello

 実行すると右図のようになります。フレーム(枠)の上に他愛もないボタンが表示されました。クリックするとボタンの色が変わります。
この色が変わるアクションは、プログラムで作らなくても部品が持っている勝手な動作です。この勝手な動作をプログラムで取り出したりすることもできます。



hello

ボタンだけじゃつまらないので、もう少し部品を追加してみましょう。
追加したのが以下のプログラムです。LogFrame()にラベルとテキスト行を追加しました。


import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.JButton;
import javax.swing.JFrame;

import javax.swing.JLabel;
import javax.swing.JTextField;

public class LogFrame {

	public LogFrame(String title) {
		System.out.println("Hello world!2");// 不要な行です
	
		JFrame mframe = new JFrame(title);  // フレーム(枠)を作る タイトルは受け渡し
		
		JButton btn = new JButton("ボタン");
		JTextField field = new JTextField("テキストフィールドに文字その1");
		JLabel  label = new JLabel("This is Sample.");

	  	Container contentPane = mframe.getContentPane();
	    
	    	contentPane.add(label, BorderLayout.NORTH);
	    	contentPane.add(field,BorderLayout.CENTER);
		
	    	contentPane.add(btn,BorderLayout.SOUTH);    

	    	mframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	    // 閉じるボタンの処理
	   	mframe.setBounds(100, 100, 300, 250);	    // x,yとフレームの大きさを設定

	    	mframe.setLocationRelativeTo(null);	    // フレームを中央に表示
	    	mframe.setVisible(true); 	    // フレームを表示
	    
	}
}



 テキストフィールドではなくてテキストエリアに変更する

hello

  テキストフィールドとしましたが、テキストフィールドは1行しか扱えませんので、複数行を表示するために、テキストエリアに変更します。
プログラムは以下の赤字のようにJTextField関連をJTextAreaに変更するだけです。
実行後の表示はそんなに変わりません。


import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class LogFrame {

	public LogFrame(String title) {
		System.out.println("Hello world!2");// 不要な行です
	
		JFrame mframe = new JFrame(title);  // フレーム(枠)を作る タイトルは受け渡し
		JButton btn = new JButton("ボタン");
		JTextArea area = new JTextArea("テキストエリアに文字その1");
		JLabel  label = new JLabel("This is Sample.");

	    	Container contentPane = mframe.getContentPane();
	    
	    	contentPane.add(label, BorderLayout.NORTH);
	    	contentPane.add(area,BorderLayout.CENTER);
	    	contentPane.add(btn,BorderLayout.SOUTH);    

	    	mframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	    // 閉じるボタンの処理
	    	mframe.setBounds(100, 100, 300, 250);	    // x,yとフレームの大きさを設定

	    	mframe.setLocationRelativeTo(null);	    // フレームを中央に表示
	    	mframe.setVisible(true); 	    // フレームを表示
	    
	}
}



 フレームにテキストエリアができましたので、次は、このテキストエリアに文字を書き出してみたいと思います。