我有JTable
。一列包含JPanel
,其中包含一些JLabels
和ImageIcons
。我创建了一个自定义单元格渲染,除JLabel
上的工具提示外,所有工作都很好。当我将鼠标悬停在JLabels
中的任何一个上时,我需要显示该特定Tooltip
的{{1}}。它没有显示JLabel
的脚印。
这是JLabel
。
CustomRenderer
答案 0 :(得分:10)
问题是您在CellRenderer返回的组件的子组件上设置工具提示。要执行您想要的操作,您应该考虑在JTable上覆盖getToolTipText(MouseEvent e)
。从事件中,您可以使用以下命令找到鼠标所在的行和列:
java.awt.Point p = e.getPoint();
int rowIndex = rowAtPoint(p);
int colIndex = columnAtPoint(p);
然后,您可以从那里重新准备单元格渲染器,找到位于鼠标位置的组件并最终检索其工具提示。
以下是如何覆盖JTable getToolTipText的片段:
@Override
public String getToolTipText(MouseEvent event) {
String tip = null;
Point p = event.getPoint();
// Locate the renderer under the event location
int hitColumnIndex = columnAtPoint(p);
int hitRowIndex = rowAtPoint(p);
if (hitColumnIndex != -1 && hitRowIndex != -1) {
TableCellRenderer renderer = getCellRenderer(hitRowIndex, hitColumnIndex);
Component component = prepareRenderer(renderer, hitRowIndex, hitColumnIndex);
Rectangle cellRect = getCellRect(hitRowIndex, hitColumnIndex, false);
component.setBounds(cellRect);
component.validate();
component.doLayout();
p.translate(-cellRect.x, -cellRect.y);
Component comp = component.getComponentAt(p);
if (comp instanceof JComponent) {
return ((JComponent) comp).getToolTipText();
}
}
// No tip from the renderer get our own tip
if (tip == null) {
tip = getToolTipText();
}
return tip;
}