非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Java/Swing:ウィンドウの中央に縦方向にレイアウトする方法

   

Java/SwingのJFrame上のレイアウトについて抑えておきます。今回のプログラムは前回をベースにしています。

 

今回の完成形

今回の目的はウィンドウの左右上下中央に、JLabelとJButtonを縦に配置するようにします。簡単なようで少しテクニックを使います。(これがJavaFXだと簡単なんですけどね)

 

縦並び配置と横方向の中央位置

まずコントロールを縦に並べる方法と、横方向を中央に配置させる方法について解説します。

 

まずは縦並びの配置ですが、ContainerをBoxLayoutにして第二引数にBoxLayout.Y_AXISを選びます。これでコントロールは縦並びになります。

Container pane = getContentPane();
this.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
 

 

次に水平方向の位置ですが、コントロールのsetAlignmentXメソッドを使って中央指定します。

label = new JLabel("Hello World!");
label.setAlignmentX(Component.CENTER_ALIGNMENT);
 

 

上部にスペーサー(Box)を入れる

上下方向中央に配置させることはできなかったので、下図のように任意のサイズのスペーサーに役割を果たすBOXクラスを使うことにしました。これによりボックスサイズ分だけ下にずれてくれます。中央かどうかは微妙ですが、setAlignmentYメソッドを使って中央に持っていこうとしても駄目だったのでこの方法を採用しています。

 

やり方は以下の通り。

pane.add(Box.createRigidArea(new Dimension(10,60)));
 

 

 

ソースコード全文

ソースコード全文は以下のとおりです。これをコンパイルして実行すると冒頭のウィンドウが現れます。

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

class JavaTest02 extends JFrame{
  private Container pane;
  private JLabel label;

  public static void main(String[] args){
    JavaTest02 f = new JavaTest02("JavaTest02", 600, 300);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }

  //コンストラクタ
  JavaTest02(String t, int w, int h){
    super(t);
    setSize(w, h);
    pane = getContentPane();
    this.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));

    pane.add(Box.createRigidArea(new Dimension(10,60)));

    label = new JLabel("Hello World!");
    label.setFont(new Font("MigMix 1P", Font.PLAIN, 40));
    label.setAlignmentX(Component.CENTER_ALIGNMENT);
    pane.add(label);
    JButton btn = new JButton("OK");
    btn.setFont(new Font("MigMix 1P", Font.PLAIN, 20));
    btn.setMaximumSize(new Dimension(200, 50));
    btn.setAlignmentX(Component.CENTER_ALIGNMENT);
    pane.add(btn);
  }
}
 

 

スポンサーリンク

 - Java