• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:SpringLayoutの使用
#navi(../)
RIGHT:Posted by [[terai]] at 2006-06-15
*SpringLayoutの使用 [#sf3d3df1]
SpringLayoutを使用して、各ラベルのサイズとパネルからの距離が一定の比率になるような配置を指定します。

-&jnlp;
-&jar;
-&zip;

#screenshot

**サンプルコード [#a420aa84]
#code{{
public void initLayout() {
  SpringLayout layout = new SpringLayout();
  Insets i = panel.getInsets();
  int w = panel.getWidth()  - i.left - i.right;
  int h = panel.getHeight() - i.top  - i.bottom;

  l1.setPreferredSize(new Dimension( w*90/100, h*55/100 ) );
  l2.setPreferredSize(new Dimension( w*40/100, h*30/100 ) );

  layout.putConstraint(SpringLayout.WEST,  l1, w*5/100,
                       SpringLayout.WEST,  panel);
  layout.putConstraint(SpringLayout.NORTH, l1, h*5/100,
                       SpringLayout.NORTH, panel);
  layout.putConstraint(SpringLayout.WEST,  l2, w*50/100,
                       SpringLayout.WEST,  panel);
  //layout.putConstraint(SpringLayout.WEST, l2, 0, SpringLayout.WEST, l1);
  layout.putConstraint(SpringLayout.SOUTH, l2, -h*5/100,
                       SpringLayout.SOUTH, panel);

  panel.setLayout(layout);
  panel.revalidate();
}
}}

**解説 [#he0e3381]
上記のサンプルでは、SpringLayoutを使って2つのラベルをパネル内にレイアウトしています。

パネルのサイズが変更されるたびに、各ラベルのサイズとパネルからの距離が一定の割合になるように設定し直しています(ただしパネルの余白は無視)。

-JLabel1
--幅はパネルの90%、高さは55%
--パネルと自身のWESTからの距離5%、パネルと自身のNORTHからの距離5%
-JLabel2
--幅はパネルの40%、高さは30%
--パネルと自身のWESTからの距離50%、パネルと自身のSOUTHからの距離-5%

SpringLayoutでは原点は左上で、右方向、下方向に正の値を取る為、例えばパネルの南辺からコンポーネントの南辺までの距離を指定する場合は、layout.putConstraintする際にマイナスの値を指定する必要があります。

距離を0にすることも可能で、例えばサンプルコードのコメントアウトされたような指定をすると、ラベル1、2を左揃えで並べることができます。

//**参考リンク
**コメント [#v98c3ed9]
- 以前の内容は[[Swing/ComponentList]]に移動しました。 -- [[terai]] &new{2006-06-15 (木) 19:40:17};
- リスナーを使わなくても次ので出来ました。setLayout(layout);Spring panelw = layout.getConstraint(SpringLayout.WIDTH, panel);layout.getConstraints(name).setWidth(Spring.scale(panelw, 0.9f));layout.getConstraints(name).setX(Spring.scale(panelw, 0.05f)); --  &new{2010-09-02 (木) 02:41:13};

#comment