フローレイアウト

ボーダーレイアウト以外のレイアウト

最近ではボタンやラベルを配置するのもそれなりのツールを使用すればマウスで位置や大きさを指定できるようになっています。ですから配置そのものにこだわりたい場合はそちらを利用しましょう。ここではだいたい揃っていれば後はお任せでいいという場合のやりかたと考えてください。細かく指定することもできるのですが、面倒になります。

それでも、2,3紹介します。

フローレイアウトの例

.2つのボタンで作ったTwoButtons.javaを変更し、4つのボタンで、パネルの色を変えられるようにします。

ファイル名 ColorSelect.java

TwoButtons.javaをコピーしてファイル名をColorSelect.javaにします。

プログラム中の4カ所にあるTwoButtonsをColorSelectに変えます。

public class TwoButtons extends JFrame{

MyPanelの次の部分ではlabelは使いませんから消して、button3,button4 を宣言します。

JButton button1;
JButton button2;
JLabel label;

次に示すのはコンストラクタの最初の部分、ボタンのオブジェクトを作る部分です。ここでも同様にlabelは使いませんから消して、button3,button4 を追加します。Click Me! などとなっているボタンの上の文字は赤、青、red,blueなどボタンで選ぶ色がわかるように変えます。(何色でも漢字でも英語でもかまいません)

button1 = new JButton("Click Me!");
button2 = new JButton("Clear");    
label = new JLabel("clicks",JLabel.CENTER);

次に示すのはレイアウトマネージャの部分です。これはボーダーレイアウトの場合です。

setLayout(new BorderLayout());    //マネージャ
add(button2, BorderLayout.NORTH);   
add(label, BorderLayout.CENTER);
add(button1, BorderLayout.SOUTH);   

ここは次のようにフローレイアウトに変えます。addの後にはボタン名の他は何も指定する必要がありません。

setLayout(new FlowLayout());     //レイアウトマネージャを指定
add(button1);
add(button2);
add(button3);
add(button4);

つぎに示すのはaddActionListenerへの登録ですが、2つしかないものを4つにするだけです。

button1.addActionListener(this);
button2.addActionListener(this);

次はクリックされたときの動作を決める部分actionPerformed()です。こうなっていました。

if (e.getSource() == button1) {
	count++;
	label.setText(count + " clicks");
}
/* 2つめのボタンだったら */			
else if (e.getSource() == button2) {
	count = 0;
	label.setText(count + " clicks");
}

下図は途中までやりました。4つのボタンの判断して、button1だったら赤にするようにしています。もちろんColor.red でもいいのです。2〜4については自分で入れてください。

if (e.getSource() == button1) {
	setBackground(new Color(255,0,0));
}
else if (e.getSource() == button2) {
        //2つ目の色
}
else if (e.getSource() == button3) {
        //3つ目の色
}
else if (e.getSource() == button4) {
        //4つ目の色
}

フローレイアウト

フローレイアウトは左から右にadd順に配置します。はみ出した分は次の行に押し出されます。

つぎのバリエーションがあります。

FlowLayout()

中央揃えにします。

FlowLayout(int align)

int alignをFlowLayout.LEFT、FlowLayout.RIGHT、または FlowLayout.CENTERにすることで、左揃え、右揃え、中央揃えにします。

FlowLayout(int align, int hgap, int vgap)

さらに、隙間の大きさを指定できます。

    hgap - コンポーネント間の水平方向の間隔
    vgap - コンポーネント間の垂直方向の間隔
もくじ

聖愛高等学校
http://www.seiai.ed.jp/
Last Modified