I have a ListCellRenderer which extends JPanel. Now I try to override its createToolTip(). But it seems like method is not getting overridden. What could be the reason?
My Code:
public class MyRender extends JPanel implements ListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
if (value != null) {
removeAll();
// -- add data to JPanel.
setToolTipText("hi");
return this;
}
return null;
}
@Override
public JToolTip createToolTip() {
System.out.println("Success");
return new MyToolTip();
}
}
It doesn't even prints "Success".
解决方案
I guess this method is never called because the ListCellRenderer acts as a "rubber stamp", hence it exists only during repaint, and is never added to any container, in particular not the JList it is assigned to.
Thus, the tooltip is always created by the JList itself, never the ListCellRenderer.
If you want to have a special tooltip for every item in your list, then there are several ways, the easiest (but maybe not the nicest) is probably to subclass JList and override getToolTipText(MouseEvent e). That method received the mouse coordinates for which to get the tooltip, you'll have to convert them to the index of the item over which the mouse is, by using locationToIndex().