前回作ったフレームにボタンとラベルを置きます。
ラベルは文字を表示するだけですが、書く位置を数値で示す必要がないので楽です。ボタンは押すことができますが、まだなにも働きません。今後拡張していきます。
/**
* ラベルとボタンを配置
*/
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();
}
}
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 | ||
---|---|---|
WEST | CENTER | EAST |
SOUTH |
ラベルを貼ります。BorderLayout.CENTER はレイアウトマネージャへの指示です。
add(label, BorderLayout.CENTER);
ボタンを貼ります。BorderLayout.SOUTH はレイアウトマネージャへの指示です。
add(button, BorderLayout.SOUTH);
上記プログラムをつくりなさい。
ボタンの数やラベルの数を増やして、WESTやNORTHに配置してみなさい。
下図はボタンを増やして、EAST に加えたものです。フレームの大きさを400×300と指定しているので不格好です。
setVisible(true);の前に pack();という指示を加えると、次のように不要な部分をカットしてすっきりしてくれます。