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()
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.