Swing/CurveLayout のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/CurveLayout へ行く。
TITLE:LayoutManagerを拡張して曲線上にコンポーネントを配置
Posted by aterai at 2011-06-27
LayoutManagerを拡張して曲線上にコンポーネントを配置
LayoutManagerを拡張して曲線上にコンポーネントを配置します。
- &jnlp;
- &jar;
- &zip;
サンプルコード
final double A2 = 4.0;
panel2.setLayout(new FlowLayout() {
@Override public void layoutContainer(Container target) {
synchronized(target.getTreeLock()) {
Insets insets = target.getInsets();
int nmembers = target.getComponentCount();
if(nmembers<=0) return;
int vgap = getVgap();
int hgap = getHgap();
int rowh = (target.getHeight()-(insets.top+insets.bottom+vgap*2))/nmembers;
int x = insets.left + hgap;
int y = insets.top + vgap;
for(int i=0;i<nmembers;i++) {
Component m = target.getComponent(i);
if(m.isVisible()) {
Dimension d = m.getPreferredSize();
m.setSize(d.width, d.height);
m.setLocation(x, y);
y += (vgap + Math.min(rowh, d.height));
x = (int)(A2 * Math.sqrt(y));
}
}
}
}
});
View in GitHub: Java, Kotlin解説
- 左
- panel1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
- 右
- FlowLayout#layoutContainer(...)をオーバーライドして、二次曲線の上にコンポーネントを並べる