Swing/SpringLayout のバックアップ(No.11)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/SpringLayout へ行く。
- 1 (2004-06-02 (水) 10:00:16)
- 2 (2004-09-08 (水) 09:44:17)
- 3 (2004-10-08 (金) 06:25:28)
- 4 (2004-11-04 (木) 10:11:41)
- 5 (2005-04-28 (木) 04:33:00)
- 6 (2005-05-10 (火) 05:35:19)
- 7 (2005-06-27 (月) 06:53:37)
- 8 (2005-07-06 (水) 23:54:35)
- 9 (2005-10-16 (日) 16:35:52)
- 10 (2006-02-27 (月) 16:28:56)
- 11 (2006-06-15 (木) 19:35:23)
- 12 (2006-10-23 (月) 15:43:37)
- 13 (2007-07-13 (金) 19:50:08)
- 14 (2007-10-24 (水) 00:33:37)
- 15 (2010-09-02 (木) 02:41:13)
- 16 (2010-09-02 (木) 07:01:18)
- 17 (2013-02-20 (水) 15:26:59)
- 18 (2013-04-05 (金) 17:59:33)
- 19 (2013-04-17 (水) 01:34:15)
- 20 (2013-08-17 (土) 01:11:40)
- 21 (2014-09-17 (水) 13:18:28)
- 22 (2014-10-23 (木) 00:56:02)
- 23 (2015-03-31 (火) 21:05:41)
- 24 (2016-05-24 (火) 22:25:15)
- 25 (2016-09-02 (金) 12:25:29)
- 26 (2017-03-30 (木) 14:07:31)
- 27 (2018-03-07 (水) 19:08:35)
- 28 (2020-03-11 (水) 19:23:51)
- 29 (2021-08-20 (金) 14:02:05)
- 30 (2025-01-03 (金) 08:57:02)
- 31 (2025-01-03 (金) 09:01:23)
- 32 (2025-01-03 (金) 09:02:38)
- 33 (2025-01-03 (金) 09:03:21)
- 34 (2025-01-03 (金) 09:04:02)
- 35 (2025-06-19 (木) 12:41:37)
- 36 (2025-06-19 (木) 12:43:47)
TITLE:SpringLayoutでリスト状に並べる
SpringLayoutでリスト状に並べる
編集者:Terai Atsuhiro
作成日:2004-03-22
更新日:2021-08-20 (金) 14:02:05
概要
高さの異なるコンポーネントをリスト状に並べてみます。
#screenshot
サンプルコード
public void addComp(JComponent label) {
SpringLayout layout = new SpringLayout();
Component[] list = pnl.getComponents();
if(list.length==0) {
layout.putConstraint(
SpringLayout.WEST,label,0,SpringLayout.WEST,pnl);
layout.putConstraint(
SpringLayout.NORTH,label,0,SpringLayout.NORTH,pnl);
}else{
JComponent cmp = null;
for(int i=0;i<list.length;i++) {
JComponent tmp = (JComponent)list[i];
layout.putConstraint(
SpringLayout.WEST,tmp,0,SpringLayout.WEST,pnl);
if(cmp==null) {
layout.putConstraint(
SpringLayout.NORTH,tmp,0,SpringLayout.NORTH,pnl);
}else{
layout.putConstraint(
SpringLayout.NORTH,tmp,0,SpringLayout.SOUTH,cmp);
}
cmp = tmp;
}
layout.putConstraint(
SpringLayout.WEST,label,0,SpringLayout.WEST,pnl);
layout.putConstraint(
SpringLayout.NORTH,label,0,SpringLayout.SOUTH,cmp);
}
pnl.add(label);
pnl.setLayout(layout);
initComps();
}
public void initComps() {
Rectangle rv = scroll.getViewport().getViewRect();
Insets ins = pnl.getInsets();
int cw = (int)rv.getWidth() - ins.left - ins.right;
int ch = 0;
Component[] list = pnl.getComponents();
for(int i=0;i<list.length;i++) {
JComponent tmp = (JComponent)list[i];
int th = tmp.getPreferredSize().height;
tmp.setPreferredSize(new Dimension(cw, th));
ch = ch + th;
}
Dimension d = new Dimension(
(int)rv.getWidth(),ch+ins.top+ins.bottom);
pnl.setPreferredSize(d);
pnl.revalidate();
}
- &jnlp;
- &jar;
- &zip;
解説
上記のサンプルでは、SpringLayoutを使ってパネルにコンポーネントを並べています。右クリックのポップアップメニューから、高さの異なるラベルとボタンを追加することができます。追加されたコンポーネントの幅はJListのようにViewportに合わせて変化しますが、高さはsetPreferredSize()で設定されたものを維持します。
チュートリアルのSpringFormにあるSpringUtilities.javaを使用すると、サンプルのaddCompメソッドは以下のように書くこともできます。
public void addComp2(JComponent cmp) {
pnl.add(cmp);
Component[] list = pnl.getComponents();
SpringUtilities.makeCompactGrid(pnl,
list.length, 1, //rows, cols
6, 6, //initX, initY
6, 6); //xPad, yPad
initComps();
}