ボタンを置く

フレームにボタンとラベルを配置します

前回作ったフレームにボタンとラベルを置きます。

ラベルは文字を表示するだけですが、書く位置を数値で示す必要がないので楽です。ボタンは押すことができますが、まだなにも働きません。今後拡張していきます。

ファイル名 ButtonTest.java

/**
 *  ラベルとボタンを配置 
 */
import javax.swing.*;
import java.awt.*;   //BorderLayout()を使うために

public class ButtonTest extends JFrame{
	/* コンストラクタ */
	public ButtonTest(){
		setSize(400, 300);                 //サイズを指定
		setDefaultCloseOperation(EXIT_ON_CLOSE); //終了処理を追加

		JLabel label = new JLabel("clicks",JLabel.CENTER); //ラベルを作る
		JButton button = new JButton("Click Me!");         //ボタンを作る
	
		setLayout(new BorderLayout());     //レイアウトマネージャを指定

		add(label, BorderLayout.CENTER);   //ラベルを真ん中に
		add(button, BorderLayout.SOUTH);   //ボタンを下に配置
		setVisible(true);                  //実際に表示する
	}
	/********* main **********/
	public static void main(String[] args){
		/* フレームを作成(事実上のプログラム実行) */
		ButtonTest myframe = new ButtonTest();
	}
}

解説

importをもう一つ

javax.swing.* に加えて、java.awt.* が必要になります。今回は BorderLayout のためですが、GUI のクラスでは、この2つが必要になることが多いのです。

import javax.swing.*;
import java.awt.*;

ラベルを作る

ラベルを作ります。JLabelのクラスを使ってラベルオブジェクトを生成しています。(   )の中の最初の文字列が表示されます。何も指定しないと左寄せになります。 そこでコンマで区切って JLabel.CENTER を加え、中央に表示されるようにしました。

		JLabel label = new JLabel("clicks",JLabel.CENTER);

ボタンを作る

ボタンを作ります。JButtonのクラスを使ってボタンオブジェクトを生成しています。(   )の中に String を指定するとこれがボタンの中央に表示されます。

		JButton button = new JButton("Click Me!");

レイアウトマネージャ

BorderLayoutはレイアウトマネージャです。私たちに代わって適当に配置をしてくれます。もちろん細かく指定することもできるのですが、いまは自動にしておきます。レイアウトマネージャにはいろいろ種類があって、BorderLayoutはそのひとつです。

		setLayout(new BorderLayout());

実はJFrameはレイアウトマネージャを指定しないと自動的にBorderLayoutを設定しますから、この1行はなくても同じですが、異なる場合もあるので念のために指定しています。

BorderLayoutは次のように配置します。ただし、この5つのうち無いものは自動的に領域をつぶして、存在するものをいっぱいまで広げます。

NORTH
WESTCENTEREAST
SOUTH

ラベルを真ん中に配置

ラベルを貼ります。BorderLayout.CENTER はレイアウトマネージャへの指示です。

		add(label, BorderLayout.CENTER);

ボタンを下に配置

ボタンを貼ります。BorderLayout.SOUTH はレイアウトマネージャへの指示です。

		add(button, BorderLayout.SOUTH);

課題

1

上記プログラムをつくりなさい。

ファイル名 ButtonTest.java

2

ファイル名 ButtonTest2.java

ボタンの数やラベルの数を増やして、WESTやNORTHに配置してみなさい。

下図はボタンを増やして、EAST に加えたものです。フレームの大きさを400×300と指定しているので不格好です。

setVisible(true);の前に pack();という指示を加えると、次のように不要な部分をカットしてすっきりしてくれます。

もくじ


Javaプログラミング
聖愛中学高等学校
http://www.seiai.ed.jp/
Dec.2003
Feb.2009
Oct.2011