LoginSignup
5
8

More than 5 years have passed since last update.

いまどきのSwing用レイアウト部品

Last updated at Posted at 2016-07-16

TMGridBagLayoutについて

はじめに

Java 8でJava FXが標準ライブラリ扱いとなりましたが、今でもSwingを使う人はたくさんいます。私もJava FXの基本的なGUI部品(TreeView等)がまだ扱いづらいと感じていて、未だに積極的に使おうという気分になれません。今でも、簡単なGUI部品ならSwingで済ませてしまいます。

Swingでは画面にGUI部品を配置するにはレイアウトマネージャ(java.awt.LayoutManager2の実装クラス)を使うわけですが、自分が満足に使えるものがJava標準ライブラリにはありません。GridBagLayoutもちょっと今ひとつです。

というわけで、レイアウトマネージャを作りました。

TMGridBagLayoutのご紹介

自作レイアウトマネージャは、GridBagLayoutとGridBagConstraintsを拡張したようなものです。TMGridBagLayout と TMGridBagConstraints をGistにあげました。サンプルもあります。Java 8以降で動作します(Stream APIを使っているので…)。

そこにあるサンプルを起動すると、次のようなウィンドウが表示されます。
TMGridBagLayoutSample.gif

そのウィンドウの幅を伸長すると、次のようになります。JLabelやJButtonのサイズは常に不変ですが、JTextFieldだけはウィンドウ幅に合わせて幅が自動的に伸縮されます。
TMGridBagLayoutSample2.gif

TMGridBagLayoutの使い方

java.awt.GridBagLayoutとjav.awt.GridBagConstraintsと同じ要領で、TMGridBagLayoutとTMGridBagConstraintsを組み合わせて使います。

まず、画面をグリッドに分割して考えます。上のサンプルでは、下図のように縦3×横3のグリッドにGUI部品を配置しています。なお、丸数字の1は、ウィンドウの幅に合わせて伸縮する横グリッドの番号です。他のグリッドは伸縮しません。
TMGridBagLayoutSample3.gif

このような方法でGUI部品を配置するには、次のようにTMGridBagLayoutを用意します。第1引数と第2引数ではグリッドは3×3であることを指定しています。第3引数では横1番目のグリッドの幅を伸縮可能であることを指定し、第4引数では縦はどのグリッドも伸縮しないよう-1を指定しています。

TMGridBagLayout layout = new TMGridBagLayout(3, 3, 1, -1);

そして、パネルにGUI部品を追加するときに、TMGridBagConstraintsを次のようにして使います。

add(new JLabel("Item1: "), new TMGridBagConstraints(0, 0, 1, 1));
add(new JTextField()     , new TMGridBagConstraints(1, 0, 2, 1));
add(new JLabel("Item2: "), new TMGridBagConstraints(0, 1, 1, 1));
add(new JTextField()     , new TMGridBagConstraints(1, 1, 2, 1));
add(new JButton("Button"), new TMGridBagConstraints(2, 2, 1, 1));

たとえば、2つ目のJTextFieldの追加では、「new TMGridBagConstraints(1, 1, 2, 1)」としていますが、これは横1番め、縦1番目のグリッドに、幅2、高さ1で配備するように指示しているわけです。

説明は以上ですが、ぜひ、使っていただき、便利さを理解していただけたらと思います。ソースは自由に改変・配布してもOKです。

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8