Swing/SizeLayoutManager のバックアップ(No.4)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/SizeLayoutManager へ行く。
- 1 (2018-02-15 (木) 14:23:42)
- 2 (2018-04-03 (火) 15:08:36)
- 3 (2020-03-28 (土) 20:50:44)
- 4 (2021-10-06 (水) 08:44:32)
- category: swing folder: SizeLayoutManager title: LayoutManagerでコンポーネントのサイズを変更する tags: [LayoutManager, FlowLayout, JToggleButton] author: aterai pubdate: 2017-04-10T14:38:31+09:00 description: LayoutManagerを使用して、コンポーネントの状態に応じてそのサイズや位置を変更します。 image: https://drive.google.com/uc?id=1nYydwcffL9ElwLnTcopf0y05pAU6chdG4w
概要
LayoutManager
を使用して、コンポーネントの状態に応じてそのサイズや位置を変更します。
Screenshot
Advertisement
サンプルコード
JPanel p = new JPanel(new GridBagLayout());
p.setLayout(new FlowLayout() {
@Override public void layoutContainer(Container target) {
synchronized (target.getTreeLock()) {
int nmembers = target.getComponentCount();
if (nmembers <= 0) {
return;
}
Insets insets = target.getInsets();
//int vgap = getVgap();
int hgap = getHgap();
int rowh = target.getHeight();
int x = insets.left + hgap;
for (int i = 0; i < nmembers; i++) {
Component m = target.getComponent(i);
if (m.isVisible() && m instanceof AbstractButton) {
int v = ((AbstractButton) m).isSelected() ? 80 : 50;
Dimension d = new Dimension(v, v);
m.setSize(d);
int y = (rowh - v) / 2;
m.setLocation(x, y);
x += d.width + hgap;
}
}
}
}
});
ActionListener al = e -> p.revalidate();
ButtonGroup bg = new ButtonGroup();
Stream.of("b1", "b2", "b3").forEach(s -> {
JToggleButton b = new JToggleButton(s);
b.addActionListener(al);
bg.add(b);
p.add(b);
});
View in GitHub: Java, Kotlin解説
Override JToggleButton#getPreferredSize(...)
JToggleButton#getPreferredSize(...)
をオーバーライドし、自身が選択されているかどうかで推奨サイズを変更
Override FlowLayout#layoutContainer(...)
FlowLayout#layoutContainer(...)
をオーバーライドし、子コンポーネントであるJToggleButton
が選択されているかどうかで表示サイズを変更LayoutManager
内なのでJToggleButton#setSize(...)
が使用可能LayoutManager
以外でのsetSize(...)
、setPreferredSize(...)
、setMaximumSize
などの使用は非推奨- Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing? - Stack Overflow
参考リンク
- Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing? - Stack Overflow
- JTreeのノードを検索する
Timer
を使用してサイズ変更のアニメーションを行うBorderLayout
のサンプル