简体   繁体   中英

Override createToolTip() method of JPanel in java swing

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM