whichのブログ ~プログラミング体験記~ -13ページ目

whichのブログ ~プログラミング体験記~

主にJava,vVsual C#,Andoroid,SQLについて
覚え基本た文法やプログラミング技法、各クラスの利用法を
忘れないように形にしたものです

初心者だとかプロだとか特に意識せず利用してもらえるとうれしいです。

■GridLayoutクラス
前回の予告どおり今回は部品をただ均等に配置するGridLayoutです。

   
GridLayoutのイメージ                 前回やったFlowLayoutのイメージ

似たような配置でもあるこの2つのレイアウトマネージャですがこうやって比較すると明らかに違うことがわかります。
実際この2つのウィンドウを同時に実行してみるとわかるのですが
FlowLayoutの方は横や縦に大きさを変えるとボタンの配置が移動する(横に伸ばしすぎると部品が1列に並ぶ)現象が起ることから現在のサイズ中央から左の順に配置していき均等のサイズで配置できなければ改行するという法則であるためアプリケーションとしてはあまよろしくない
GridLayoutの場合はパッと見中央ぞろえではないという違いだけだが、先ほどのようにウィンドウサイズを変更しても各ボタンの大きさが変わるだけで配置がずれない。個人的にはBorderLayoutの上にこのGridLayout設定した方が部品の配置デザインがよくなると考えている。

コンストラクター: new GridLayout(int height,int width)・・・・第1引数で行数(たて)、第2引数で列数(よこ)にレイアウトを分割する
もしコンストラクタで0を引数に指定したら任意(部品の数に応じて設定)される。
しかも固定長ではないためコンストラクタの第1引数×第2引数よりもGUI部品の数が多い場合は自動的に値が変化してしまうため注意。

■サンプル(レイアウトマネージャの配置を変更した以外は前回と一緒)

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

public class GUIGrid extends JFrame implements ActionListener{
Container base = getContentPane();
public static void main(String [] arg) {
JFrame form = new GUIGrid();
form.setVisible(true);
}
GUIGrid(){
     this.setTitle("GridLayout");
             this.setSize(300,200);
             this.setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(4,4) );
JButton btn;
         for(int i=1;i<=10;i++){
btn = new JButton("ID:" + i);
btn.addActionListener(this);
panel.add(btn);
}
this.add(panel);
}
public void actionPerformed(ActionEvent e){
String cmd = e.getActionCommand();
JOptionPane.showMessageDialog(null, cmd);
}
}

実行結果
それぞれのボタンを押すとボタンのテキストがメッセージボックスに表示される
そろそろ違う処理でもいい気がするがSystem.out.println(文字列)に近い汎用性の高い処理がこのパターンしか思いつかないためとりあえず新しい処理に変更するのは保留中。

setLayout(new GridLayout(4,4))という記述の引数の数値を片方だけ1にしておくだけで単純な均等配置(1行又は1列の分割)ができるのでBorderLayoutが5分割だったのを1ヶ所だけ3分割という表現もできる。

これでBorderLayout、FlowLayout、GridLayoutの3つ代表的基本レイアウトが完了しましたが、次回はGridBagLayoutというレイアウトマネージャに挑戦ですが、「下調べ」と称してどんな感じの設定方法か調査を行ったところあまりにも現実的ではないためsetLayout(null)という特殊なレイアウト方法と併せてやろうと考えてるところです