Swing/TitledBorderToolTip のバックアップ(No.7)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/TitledBorderToolTip へ行く。
- 1 (2017-04-11 (火) 13:13:15)
- 2 (2018-04-05 (木) 10:29:10)
- 3 (2020-04-02 (木) 18:36:26)
- 4 (2021-10-06 (水) 08:43:12)
- 5 (2024-02-02 (金) 11:56:25)
- 6 (2024-02-09 (金) 13:17:59)
- 7 (2025-01-03 (金) 08:57:02)
- 8 (2025-01-03 (金) 09:01:23)
- 9 (2025-01-03 (金) 09:02:38)
- 10 (2025-01-03 (金) 09:03:21)
- 11 (2025-01-03 (金) 09:04:02)
- category: swing
folder: TitledBorderToolTip
title: TitledBorderのタイトルが省略されている場合はToolTipを表示する
tags: [TitledBorder, JToolTip, JLabel]
author: aterai
pubdate: 2015-09-28T01:33:50+09:00
description: TitledBorderのタイトルが設定したコンポーネントの幅より長くなって末尾の文字列が省略される場合、JToolTipでタイトル全体を表示します。
image:
概要
TitledBorder
のタイトルが設定したコンポーネントの幅より長くなって末尾の文字列が省略される場合、JToolTip
でタイトル全体を表示します。
Screenshot

Advertisement
サンプルコード
JPanel panel1 = new JPanel() {
private final JLabel label = new JLabel();
@Override public String getToolTipText(MouseEvent e) {
Border b = getBorder();
if (b instanceof TitledBorder) {
// int edge = 2; // EDGE_SPACING;
TitledBorder titledBorder = (TitledBorder) b;
Insets i = titledBorder.getBorderInsets(this);
String title = titledBorder.getTitle();
label.setFont(titledBorder.getTitleFont());
label.setText(title);
Dimension size = label.getPreferredSize();
int labelX = i.left;
int labelY = 0;
int labelW = getSize().width - i.left - i.right;
int labelH = i.top;
if (size.width > labelW) {
Rectangle r = new Rectangle(labelX, labelY, labelW, labelH);
return r.contains(e.getPoint()) ? title : null;
}
}
return null; // super.getToolTipText(e);
}
};
panel1.setBorder(BorderFactory.createTitledBorder("aaaaa...aaaaa"));
panel1.setToolTipText("JPanel");
View in GitHub: Java, Kotlin解説
TitledBorder
を設定するJPanel
のgetToolTipText(...)
メソッドをオーバーライド- サイズ計算用の仮
JLabel
にTitledBorder
のフォントや文字列を設定してその幅をgetPreferredSize()
メソッドで取得TitledBorder
が内部で使用しているJLabel
はprivate
なのでアクセスできない
- 仮
JLabel
の幅がTitledBorder
を設定したJPanel
の幅より長い場合、文字列が省略されていると判断する - 上記に加えてマウスカーソルが
TitledBorder
の余白内(位置がTOP
の場合)に存在する場合、TitledBorder#getTitle()
で取得したタイトルを返すことでJToolTip
を表示する
- サイズ計算用の仮
- 制限:
- このサンプルはタイトルの位置が
TOP
の場合のみに対応 - タイトルに
html
タグを使用して省略ではなく折り返しが発生する場合には未対応
- このサンプルはタイトルの位置が