Swing/GroupLayout の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/GroupLayout へ行く。
- Swing/GroupLayout の差分を削除
--- category: swing folder: GroupLayout title: GroupLayoutの使用 tags: [GroupLayout, GridBagLayout, LayoutManager] author: aterai pubdate: 2007-07-30T15:46:47+09:00 description: JDK 6で新しく導入されたGroupLayoutとGridBagLayoutを比較しています。 image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTNn9AdVUI/AAAAAAAAAbE/yOFdtRVr6P4/s800/GroupLayout.png --- * 概要 [#summary] `JDK 6`で新しく導入された`GroupLayout`と`GridBagLayout`を比較しています。`GroupLayout`のサンプルは、`API`ドキュメントの例をそのまま引用しています。 #download(https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTNn9AdVUI/AAAAAAAAAbE/yOFdtRVr6P4/s800/GroupLayout.png) * サンプルコード [#sourcecode] #code(link){{ // GroupLayout JPanel p1 = new JPanel(); p1.setBorder(BorderFactory.createTitledBorder("GroupLayout")); GroupLayout layout = new GroupLayout(p1); p1.setLayout(layout); layout.setAutoCreateGaps(true); layout.setAutoCreateContainerGaps(true); GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup(); hGroup.addGroup(layout.createParallelGroup() .addComponent(label1).addComponent(label2)); hGroup.addGroup(layout.createParallelGroup() .addComponent(tf1).addComponent(tf2)); layout.setHorizontalGroup(hGroup); GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup(); vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE) .addComponent(label1).addComponent(tf1)); vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE) .addComponent(label2).addComponent(tf2)); layout.setVerticalGroup(vGroup); }} #code{{ // GridBagLayout JPanel p2 = new JPanel(new GridBagLayout()); Border inside = BorderFactory.createEmptyBorder(10, 5 + 2, 10, 10 + 2); Border outside = BorderFactory.createTitledBorder("GridBagLayout"); p2.setBorder(BorderFactory.createCompoundBorder(outside, inside)); GridBagConstraints c = new GridBagConstraints(); c.gridheight = 1; c.gridx = 0; c.insets = new Insets(5, 5, 5, 0); c.anchor = GridBagConstraints.WEST; c.gridy = 0; p2.add(label3, c); // p2.add(new JLabel("一度だけのaddで"), c); c.gridy = 1; p2.add(label4, c); // p2.add(new JLabel("いいのは利点かも"), c); c.gridx = 1; c.weightx = 1.0; c.fill = GridBagConstraints.HORIZONTAL; c.gridy = 0; p2.add(tf3, c); c.gridy = 1; p2.add(tf4, c); }} * 解説 [#explanation] `GroupLayout`を手で書くことはあまりなさそうですが、それでも`GridBagLayout`と同程度の記述で同じようなレイアウトも作成できるようです。また`GroupLayout`を手書きする場合、コンテナとコンポーネントの間にギャップを自動的に作成してくれる`GroupLayout#setAutoCreateContainerGaps`などが便利です。 上記のサンプルでは、`GroupLayout`と`GridBagLayout`でレイアウトしたパネルを`GridLayout`(`BorderLayout.CENTER`と同じで推奨サイズが無視される)で上下に並べているため、フレームを拡大すると`GroupLayout`は上揃え、`GridBagLayout`は中央揃えになっています。 * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/GroupLayout.html GroupLayout (Java Platform SE 8)] - [[GridBagLayoutの使用>Swing/GridBagLayout]] - [http://d.hatena.ne.jp/jawagenjin/20080127/1201444435 GroupLayoutの考え方2 - ばかの一つ覚え。] - %%[http://d.hatena.ne.jp/jawagenjin/20080127/1201444435 GroupLayoutの考え方2 - ばかの一つ覚え。]%% -- `GroupLayout`のイメージが、図で分かりやすく解説されている * コメント [#comment] #comment #comment