---
category: swing
folder: MultiPartPopupMenu
title: JPopupMenuとJToolBarを同時にポップアップ表示する
title-en: Popup a JPopupMenu and a JToolBar at the same time
tags: [JPopupMenu, JToolBar]
author: aterai
pubdate: 2026-03-09T07:38:12+09:00
description: JPopupMenuの背景を透明に変更し、JToolBarとメニューボタンを分離して配置することで両方を同時に表示します。
summary-jp: JPopupMenuの背景を透明に変更し、JToolBarとメニューボタンを分離して配置することで両方を同時に表示します。
summary-en: Change the JPopupMenu background to transparent and separate the JToolBar and menu button to display both at the same time.
image: https://drive.google.com/uc?id=1quXipIeJMXt9GvE8PKW4LDF1Hju2wES9
---
* Summary [#summary]
JPopupMenuの背景を透明に変更し、JToolBarとメニューボタンを分離して配置することで両方を同時に表示します。
// #en{{Change the JPopupMenu background to transparent and separate the JToolBar and menu button to display both at the same time.}}
`JPopupMenu`の背景を透明に変更し、`JToolBar`とメニューボタンを分離して配置することで両方を同時に表示します。
// #en{{Change the `JPopupMenu` background to transparent and separate the `JToolBar` and menu button to display both at the same time.}}

#download(https://drive.google.com/uc?id=1quXipIeJMXt9GvE8PKW4LDF1Hju2wES9)

* Source Code Examples [#sourcecode]
#code(link){{
private static JPopupMenu createCustomPopup() {
  JPopupMenu popup = new JPopupMenu() {
    @Override public void updateUI() {
      setUI(new TransparentPopupMenuUI());
      setOpaque(false);
    }
  };
  popup.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
  popup.setLayout(new BorderLayout(0, 8));

  JToolBar toolbar = new RoundedToolBar(15);
  toolbar.setFloatable(false);
  toolbar.setBorder(BorderFactory.createEmptyBorder(2, 5, 2, 5));
  Arrays.asList("📋", "💾", "🔍", "🔖", "🔋", "🔔")
      .forEach(icon -> toolbar.add(createIconButton(icon)));

  RoundPanel menuPanel = new RoundPanel(15);
  menuPanel.setLayout(new BoxLayout(menuPanel, BoxLayout.Y_AXIS));
  menuPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
  Arrays.asList("Properties", "Rename", "Save", "Delete")
      .forEach(text -> menuPanel.add(createMenuButton(text, popup)));

  popup.add(toolbar, BorderLayout.NORTH);
  popup.add(menuPanel, BorderLayout.WEST);
  return popup;
}
}}

* Description [#description]
- 親`JPopupMenu`
-- 背景ウィンドウを完全に透明化
--- [[JPopupMenuに半透明の影を付ける>Swing/DropShadowPopup]]
-- 間隔を開けて子`JToolBar`と子`JPanel`(`JButton`を配置)を配置することで個別にポップアップしたように見せかけている
- 子`JToolBar`
-- 横長ツールバー
-- `JToolBar#setFloatable(false)`で浮動を不可に設定
- 子`JPanel`
-- `JPanel`に`JMenuItem`を配置するとマウスオーバーで親`JPopupMenu`が閉じる場合があるので`JButton`で代用
-- `BorderLayout.WEST`で左側に寄せて配置

* Reference [#reference]
- [[JPopupMenuに半透明の影を付ける>Swing/DropShadowPopup]]

* Comment [#comment]
#comment
#comment