タイトル
 メニューにないコーナーはTopからいけます
TOPJavaSwingLayoutManager → This Page

GridBagLayout@Swing LayoutManagerサンプル

概要

Java - Swing - LayoutManager - GridBagLayout のサンプルです。
GridBagLayout は GridLayout の高機能版と思って下さい。
エクセルなどで良くやる「このセルとこのセルを結合して・・・」ように、
各格子を色々とカスタマイズできます。

コンストラクタ

コンストラクタ説明引数引数説明
GridBagLayout() GridBagLayout を作成 - -


解説

各格子にコンポーネントを追加する際、GridBagConstraints クラスを使って
制約を指定します。
GridBagConstraints は以下のプロパティを持っています。
プロパティプロパティ説明
anchor コンポーネントの表示に必要な領域が、
割りあてられた表示領域より小さい場合にどうするか
設定値(定数)内容
GridBagConstraints.CENTER 中央(デフォルト)
GridBagConstraints.NORTH
GridBagConstraints.NORTHWEST 左上
GridBagConstraints.NORTHEAST 右上
GridBagConstraints.SOUTH
GridBagConstraints.SOUTHWEST 左下
GridBagConstraints.SOUTHEAST 右下
GridBagConstraints.WEST
GridBagConstraints.EAST
fill コンポーネントの表示に必要な領域よりも
割りあてられた表示領域の方が大きい場合にどうするか
設定値(定数)内容
GridBagConstraints.NONE 何もしない(デフォルト)
GridBagConstraints.HORIZONTAL 可能なだけコンポーネントの幅を広げる
GridBagConstraints.VERTICAL 可能なだけコンポーネントの高さを広げる
GridBagConstraints.BOTH 可能なだけコンポーネントの幅と高さを広げる
gridheight
gridwidth
コンポーネントが使う表示領域の列数(行数)
デフォルトは 1
指定数値以外に以下の定数を使用可能
設定値(定数)内容
GridBagConstraints.REMAINDER 列(行)を全て占有
GridBagConstraints.RELATIVE 列(行)の空いている部分を全て占有
gridx
gridy
コンポーネントの配置する列(行)
設定値(定数)内容
GridBagConstraints.RELATIVE 直前に追加されたコンポーネントの次(デフォルト)
insets 外部パディング
コンポーネントと格子の最小間隔を指定
デフォルトは 0
ipadx
ipady
内部パディング
コンポーネントの格子の最小幅に追加する領域値
デフォルトは 0
weightx
weighty
ウインドウサイズが広がった場合に
どれだけ多く(少なく)広げるか
デフォルトは 0

サンプルを実行すると以下の図のようになります。
サンプル画像

サンプルソース

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

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

/**
 * LayoutManager サンプル06
 * ・GridBagLayout
 * ・セル結合
 * 
 * @author みっちー
 */
public class LayoutManager06 extends JFrame {
	
	/**
	 * 開始メソッド
	 * 
	 * @param args	パラメータ
	 */
	public static void main(String[] args){
		LayoutManager06 frame = new LayoutManager06();
		
		// 閉じるボタンをクリックされた場合の動作を設定
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// ウインドウのタイトルを設定
		frame.setTitle("LayoutManager サンプル06[GridBagLayout]");
		
		// フレームの X座標、Y座標、幅、高さを設定
		frame.setBounds(100, 200, 500, 150);
		
		// フレームを表示(これをしないと透明のフレームが立ち上がってしまう)
		frame.setVisible(true);
	}
	
	/**
	 * コンストラクタ
	 */
	public LayoutManager06() {
		// ベースとなるパネルを[GridBagLayout]として作成
		GridBagLayout layout = new GridBagLayout();
		JPanel panelBase = new JPanel();
		panelBase.setLayout(layout);
		
		// ボタンを作成
		JButton button1 = new JButton("AAAAA");
		JButton button2 = new JButton("BBB");
		JButton button3 = new JButton("CCCCCCCC");
		JButton button4 = new JButton("D");
		JButton button5 = new JButton("EEE");
		JButton button6 = new JButton("FFFFFFFFFFFFFFFFFFFF");
		
		GridBagConstraints gbc = new GridBagConstraints();
		
		gbc.gridx = 0;
		gbc.gridy = 0;
		gbc.gridwidth = 1;
		gbc.gridheight = 2;	// 縦2つ分
		layout.setConstraints(button1, gbc);
		
		gbc.gridx = 1;
		gbc.gridy = 0;
		gbc.gridwidth = 1;
		gbc.gridheight = 1;
		layout.setConstraints(button2, gbc);
		
		gbc.gridx = 2;
		gbc.gridy = 0;
		gbc.gridwidth = 1;
		gbc.gridheight = 1;
		layout.setConstraints(button3, gbc);
		
		gbc.gridx = 1;
		gbc.gridy = 1;
		gbc.gridwidth = 1;
		gbc.gridheight = 1;
		layout.setConstraints(button4, gbc);
		
		gbc.gridx = 2;
		gbc.gridy = 1;
		gbc.gridwidth = 1;
		gbc.gridheight = 1;
		layout.setConstraints(button5, gbc);
		
		gbc.gridx = 0;
		gbc.gridy = 3;
		gbc.gridwidth = 3;	// 横3つ分
		gbc.gridheight = 1;
		layout.setConstraints(button6, gbc);
		
		// パネルにボタンを配置
		panelBase.add(button1);
		panelBase.add(button2);
		panelBase.add(button3);
		panelBase.add(button4);
		panelBase.add(button5);
		panelBase.add(button6);
		
		// ベースパネルを追加
		getContentPane().add(panelBase, BorderLayout.CENTER);
	}
}

サンプルソースのダウンロード

ソースのダウンロード(Eclipse用のプロジェクトファイルも同梱)

更新履歴

2016/05/13 Windows 8.1 + Java 7 環境で全体を見直し
2007/12/07 新規作成


TOPJavaSwingLayoutManager → This Page
Valid CSS!