---
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