セル内でのコンポーネントの表示位置を設定する
広告
コンポーネントをセルに配置する場合、セルの大きさよりもコンポーネントの大きさが小さい時にはセルの中央にコンポーネントが配置されます。このようにセルの大きさとコンポーネントの大きさが異なる場合にセル内のどの位置にコンポーネントを表示するのかを指定することができます。
セル内の表示位置を設定するには「anchor」フィールドに設定します。
public int anchor
このフィールドはコンポーネントがその表示領域より小さい場合に使用されま す。これは表示領域内にコンポーネントを配置する場所を指定します。 方向相対値、ベースライン相対値、および絶対値の 3 種類の値があります。 方向相対値は、コンテナのコンポーネントの方向プロパティーを基準に解釈さ れ、ベースライン相対値はベースラインを基準に解釈されます。絶対値の解釈 はありません。 絶対値には以下のものがあります。CENTER、NORTH、NORTHEAST、EAST、SOUTHEAST、 SOUTH、SOUTHWEST、WEST、および NORTHWEST です。 方向相対値には以下のものがあります。PAGE_START、PAGE_END、LINE_START、 LINE_END、FIRST_LINE_START、FIRST_LINE_END、LAST_LINE_START、および LAST_LINE_END です。 ベースライン相対値には以下のものがあります。BASELINE、BASELINE_LEADING、 BASELINE_TRAILING、ABOVE_BASELINE、ABOVE_BASELINE_LEADING、 ABOVE_BASELINE_TRAILING、BELOW_BASELINE、BELOW_BASELINE_LEADING、および BELOW_BASELINE_TRAILING です。デフォルト値は CENTER です。
指定方法は絶対値/方向相対値/ベースライン相対値の3種類がありますがどれか統一して使っておけば結構です。
絶対値の指定方法:
NORTHWEST | NORTH | NORTHEAST |
WEST | CENTER | EAST |
SOUTHWEST | SOUTH | SOUTHEAST |
方向相対値の指定方法:
FIRST_LINE_START | PAGE_START | FIRST_LINE_END |
LINE_START | CENTER | LINE_END |
LAST_LINE_START | PAGE_END | LAST_LINE |
実際の使い方は次のようになります。
JPanel panel = new JPanel(); panel.setLayout(new GridBagLayout()); JButton button1 = new JButton("button1"); JButton button2 = new JButton("button2"); GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.gridwidth = 1; gbc.gridheight = 2; gbc.weightx = 1.0d; gbc.anchor = GridBagConstraints.NORTH; layout.setConstraints(button1, gbc); gbc.gridx = 1; gbc.gridy = 0; gbc.gridwidth = 1; gbc.gridheight = 1; gbc.weightx = 1.0d; gbc.anchor = GridBagConstraints.CENTER; layout.setConstraints(button2, gbc); p.add(button1); p.add(button2);
サンプルプログラム
では簡単なサンプルを作成して試してみます。
import javax.swing.*; import java.awt.Font; import java.awt.GridBagLayout; import java.awt.GridBagConstraints; import java.awt.BorderLayout; public class GridBagLayoutTest5 extends JFrame{ public static void main(String[] args){ GridBagLayoutTest5 frame = new GridBagLayoutTest5(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 300, 200); frame.setTitle("タイトル"); frame.setVisible(true); } GridBagLayoutTest5(){ GridBagLayout layout = new GridBagLayout(); JPanel p = new JPanel(); p.setLayout(layout); GridBagConstraints gbc = new GridBagConstraints(); JButton button1 = new JButton("Google"); gbc.gridx = 0; gbc.gridy = 0; gbc.gridheight = 2; gbc.weightx = 1.0d; gbc.weighty = 1.0d; gbc.anchor = GridBagConstraints.NORTHWEST; layout.setConstraints(button1, gbc); JButton button2 = new JButton("Yahoo!"); button2.setFont(new Font("Arial", Font.PLAIN, 30)); gbc.gridx = 1; gbc.gridy = 0; gbc.gridheight = 1; gbc.weightx = 1.0d; gbc.weighty = 1.0d; gbc.anchor = GridBagConstraints.NORTHEAST; layout.setConstraints(button2, gbc); JButton button3 = new JButton("MSN"); gbc.gridx = 1; gbc.gridy = 1; gbc.weightx = 1.0d; gbc.weighty = 1.0d; gbc.anchor = GridBagConstraints.SOUTH; layout.setConstraints(button3, gbc); p.add(button1); p.add(button2); p.add(button3); getContentPane().add(p, BorderLayout.CENTER); } }
上記をコンパイルした後で実行すると次のように表示されます。
今回は左上、右上、中央下にそれぞれコンポーネントを配置しました。分かりやすいように線を引いてみました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。