---
category: swing
folder: TooltipInTableCell
title: JTableのセルに複数配置したコンポーネントのJToolTip
tags: [JTable, JToolTip, ImageIcon]
author: aterai
pubdate: 2012-12-03T02:37:08+09:00
description: JTableのセル中に複数個配置したコンポーネントにそれぞれJToolTipが表示されるように設定します。
image: https://lh4.googleusercontent.com/-OhwzDU_Mys4/ULuQJmYCRiI/AAAAAAAABYQ/Y3Q5mVlliHs/s800/TooltipInTableCell.png
hreflang:
href: https://java-swing-tips.blogspot.com/2015/12/show-jtooltip-for-icons-placed-in-cell.html
lang: en
---
* Summary [#summary]
`JTable`のセル中に複数個配置したコンポーネントにそれぞれ`JToolTip`が表示されるように設定します。
#download(https://lh4.googleusercontent.com/-OhwzDU_Mys4/ULuQJmYCRiI/AAAAAAAABYQ/Y3Q5mVlliHs/s800/TooltipInTableCell.png)
* Source Code Examples [#sourcecode]
#code(link){{
JTable table = new JTable(model) {
@Override public String getToolTipText(MouseEvent e) {
Point pt = e.getPoint();
int vrow = rowAtPoint(pt);
int vcol = columnAtPoint(pt);
int mcol = convertColumnIndexToModel(vcol);
if (mcol == 1) {
TableCellRenderer tcr = getCellRenderer(vrow, vcol);
Component c = prepareRenderer(tcr, vrow, vcol);
if (c instanceof JPanel) {
Rectangle r = getCellRect(vrow, vcol, true);
c.setBounds(r);
c.doLayout();
pt.translate(-r.x, -r.y);
Component l = SwingUtilities.getDeepestComponentAt(c, pt.x, pt.y);
if (l instanceof JLabel) {
ImageIcon icon = (ImageIcon) ((JLabel) l).getIcon();
return icon.getDescription();
}
}
}
return super.getToolTipText(e);
}
};
}}
* Description [#explanation]
* Description [#description]
上記のサンプルでは、`JTable#getToolTipText(MouseEvent)`をオーバーライドして、`JTable`のセルに複数配置したコンポーネントの情報を`ToolTipText`として返すように設定しています。
- `JTable#prepareRenderer(...)`メソッドで現在マウスカーソルがあるセルのセルレンダラーを取得
- 取得したセルレンダラー内のコンポーネントの位置、サイズなどのレイアウトを更新
-- 参考: [https://stackoverflow.com/questions/10854831/tool-tip-in-jpanel-in-jtable-not-working java - Tool tip in JPanel in JTable not working - Stack Overflow]
- 更新したコンポーネント内から`SwingUtilities.getDeepestComponentAt()`メソッドでマウスカーソル直下のアイコン(`JLabel`)を取得
- `ImageIcon#getDescription()`で取得した文字列を`ToolTipText`として返す
* Reference [#reference]
- [https://stackoverflow.com/questions/10854831/tool-tip-in-jpanel-in-jtable-not-working java - Tool tip in JPanel in JTable not working - Stack Overflow]
- [[JTableのTooltipsを行ごとに変更>Swing/RowTooltips]]
- [[JListのセル中に配置したコンポーネント毎にカーソルを変更する>Swing/CursorOfCellComponent]]
* Comment [#comment]
#comment
#comment