概要

FlowLayoutの水平間隔をマイナスにして、JRadioButtonを重ねて表示し、パンくずリスト風のコンポーネントを作成します。

サンプルコード

private static JComponent makeBreadcrumbList(int overlap, List<String> list) {
  JPanel p = new JPanel(new FlowLayout(FlowLayout.LEADING, -overlap, 0));
  p.setBorder(BorderFactory.createEmptyBorder(4, overlap + 4, 4, 4));
  p.setOpaque(false);
  ButtonGroup bg = new ButtonGroup();
  for (String title: list) {
    AbstractButton b = makeButton(title, Color.PINK);
    p.add(b);
    bg.add(b);
  }
  return p;
}
view all

解説

上記のサンプルでは、指定したピクセル分だけ重なるように、FlowLayoutの水平間隔にマイナスの値を指定しています。このため、左側のJRadioButtonの下に右側のJRadioButtonが配置されている状態になっています。各JRadioButton自体は重なっていますが、描画やマウスクリックなどは重ならないよう、以下のような設定を追加しています。

  • 描画
    • 矢羽型のアイコンを設定、このアイコン以外は、setContentAreaFilled(false);などで透明化
  • マウスクリック
    • JRadioButton#contains(...)をオーバーライドして、上記の矢羽図形の外では反応しないよう設定

参考リンク

コメント