• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:OverlayLayoutの使用
#navi(../)
*OverlayLayoutの使用 [#y05c0630]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2008-01-14~
更新日:&lastmod;
---
category: swing
folder: OverlayLayout
title: OverlayLayoutの使用
tags: [OverlayLayout, LayoutManager, JButton]
author: aterai
pubdate: 2008-01-14T17:09:44+09:00
description: OverlayLayoutを使用し、JButtonを重ねて配置します。
image: https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTQqzbG85I/AAAAAAAAAf8/GAYWzSVrHvg/s800/OverlayLayout.png
---
* 概要 [#summary]
`OverlayLayout`を使用し、`JButton`を重ねて配置します。

#contents
#download(https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTQqzbG85I/AAAAAAAAAf8/GAYWzSVrHvg/s800/OverlayLayout.png)

**概要 [#x828280d]
OverlayLayoutを使用し、JButtonを重ねて配置します。
* サンプルコード [#sourcecode]
#code(link){{
JButton b1 = new JButton();
JButton b2 = new JButton();
b1.setLayout(new OverlayLayout(b1));
Insets i = b1.getInsets();
b1.setBorder(BorderFactory.createEmptyBorder(i.top, i.left, i.bottom, 4));
b1.setAction(new AbstractAction("OverlayLayoutButton") {
  @Override public void actionPerformed(ActionEvent e) {
    Toolkit.getDefaultToolkit().beep();
  }
});
JButton b2 = new JButton() {
  private final Dimension dim = new Dimension(120, 24);
  @Override public Dimension getPreferredSize() {
    return dim;
  }

#screenshot
  @Override public Dimension getMaximumSize() {
    return getPreferredSize();
  }

**サンプルコード [#ece74623]
#code{{
final JPanel p = new JPanel();
p.setLayout(new OverlayLayout(p));
p.setPreferredSize(new Dimension(60, 60));
p.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
TriangleButton2 b2 = new TriangleButton2();
TriangleButton1 b1 = new TriangleButton1();
b1.setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
b2.setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
p.add(b1);
p.add(b2);
  @Override public Dimension getMinimumSize() {
    return getPreferredSize();
  }
};
b2.setAction(new AbstractAction("▼") {
  @Override public void actionPerformed(ActionEvent e) {
    System.out.println("sub");
  }
});
b2.setAlignmentX(Component.RIGHT_ALIGNMENT);
b2.setAlignmentY(Component.BOTTOM_ALIGNMENT);
b1.add(b2);
}}
-&jnlp;
-&jar;
-&zip;

**解説 [#z79707d9]
上記のサンプルでは、同じ大きさで選択領域の異なる三角形のJButtonを、OverlayLayoutを使うことで重ねて配置しています。
* 解説 [#explanation]
- 親`JButton`をコンテナとして別の子`JButton`を追加
- 親`JButton`のレイアウトとして`OverlayLayout`を設定し、`setAlignmentX(...)`などで子`JButton`が右下に配置されるよう設定

**参考リンク [#y9ab3aa1]
-[[JButtonの形を変更>Swing/RoundButton]]
* 参考リンク [#reference]
- [[OverlayLayoutで複数のJButtonを重ねて複合ボタンを作成>Swing/CompoundButton]]
- [https://docs.oracle.com/javase/tutorial/uiswing/layout/box.html#features Box Layout Features]
- [[JTextAreaをキャプションとして画像上にスライドイン>Swing/EaseInOut]]

**コメント [#qfacad78]
* コメント [#comment]
#comment
- ボタンサイズの指定方法を変更しました。 -- &user(aterai); &new{2008-01-17 (木) 20:39:53};
- スクリーンショットなどを更新。 -- &user(aterai); &new{2008-10-29 (水) 18:51:52};

#comment