Swing/PopupMenuTitle のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/PopupMenuTitle へ行く。
- 1 (2025-07-28 (月) 14:20:39)
- category: swing folder: PopupMenuTitle title: JPopupMenuのラベルをタイトルとして表示する tags: [JPopupMenu, LookAndFeel, MotifLookAndFeel, TitledBorder] author: aterai pubdate: 2025-07-28T14:17:38+09:00 description: JPopupMenuのラベルをTitledBorderを使用してタイトル表示するよう設定します。 image: https://drive.google.com/uc?id=1GgN8x16yD3hLWcKJIHvMmzoSQYn1tDww
Summary
JPopupMenuのラベルをTitledBorderを使用してタイトル表示するよう設定します。
Screenshot

Advertisement
Source Code Examples
JPopupMenu popup1 = new JPopupMenu("JPopupMenu#setLabel(...)") {
@Override public void updateUI() {
setBorder(null);
super.updateUI();
Border border = getBorder();
String title = getLabel();
if (!isCompoundMotifBorderBorder(border) && title != null) {
Color color = UIManager.getColor("Separator.foreground");
Border underline = BorderFactory.createMatteBorder(1, 0, 0, 0, color);
Border labelBorder = BorderFactory.createTitledBorder(
underline,
title,
TitledBorder.CENTER,
TitledBorder.ABOVE_TOP,
getFont(),
getForeground());
setBorder(BorderFactory.createCompoundBorder(border, labelBorder));
}
}
};
private static boolean isCompoundMotifBorderBorder(Border border) {
boolean b0 = border instanceof CompoundBorder;
boolean b1 = b0 && isMotifBorder(((CompoundBorder) border).getInsideBorder());
boolean b2 = b0 && isMotifBorder(((CompoundBorder) border).getOutsideBorder());
return b1 || b2;
}
private static boolean isMotifBorder(Border border) {
return border.getClass().getName().contains("MotifBorders");
}
View in GitHub: Java, KotlinDescription
- 左:
MotifLookAndFeelではデフォルトでJPopupMenu#setLabel(title)で設定したタイトルがMotifBorders$MotifPopupMenuBorderを使用してBorderとして表示されるMotifLookAndFeel以外ではJPopupMenu#setLabel(title)でタイトルを設定しても表示には使用されない
- 右:
MotifLookAndFeel以外でもJPopupMenu#setLabel(title)で設定されたタイトルを表示するようTitledBorderやMatteBorder、JPopupMenuのLookAndFeelデフォルトBorderをCompoundBorderで組み合わせてタイトル表示するBorderを作成MotifLookAndFeelの場合はタイトル表示が重複しないよう上記のBorderは設定しないが、LookAndFeelがJPopupMenuに設定したタイトルを表示するかどうかをチェックする方法が存在しない?- このため、このサンプルでは
CompoundBorderのInsideBorder、OutsideBorderのどちらかのクラス名にMotifBordersが含まれているかどうかで判断している
- このため、このサンプルでは
Reference
- JPopupMenu#setLabel(String)
- java - How to force JPopupMenu to show title even if Look and Feel UI dictates otherwise? - Stack Overflow
- JPopupMenuにマウスドラッグで位置変更を可能にするヘッダを追加する
- こちらは
TitledBorderではなくJLabelをJPopupMenu先頭に追加してヘッダにタイトルを表示している
- こちらは