javaswing

Java Swing: Mouseover text on JComboBox items?


In Swing, is there a way to define mouseover text (or tool tip text) for each item in a JComboBox?


Solution

  • There is a much better way to do this than the ToolTipComboBox answer already given.

    First, make a custom ListCellRenderer:

    package com.example;
    
    import javax.swing.*;
    import java.awt.*;
    import java.util.List;
    
    public class ComboboxToolTipRenderer extends DefaultListCellRenderer {
        List<String> tooltips;
    
        @Override
        public Component getListCellRendererComponent(JList list, Object value,
                            int index, boolean isSelected, boolean cellHasFocus) {
    
            JComponent comp = (JComponent) super.getListCellRendererComponent(list,
                    value, index, isSelected, cellHasFocus);
    
            if (-1 < index && null != value && null != tooltips) {
                list.setToolTipText(tooltips.get(index));
            }
            return comp;
        }
    
        public void setTooltips(List<String> tooltips) {
            this.tooltips = tooltips;
        }
    }
    

    Then use it like this:

    JComboBox comboBox = new JComboBox();
    ComboboxToolTipRenderer renderer = new ComboboxToolTipRenderer();
    comboBox.setRenderer(renderer);
    ...
    //make a loop as needed
    comboBox.addItem(itemString);
    tooltips.add(tooltipString);
    ...
    renderer.setTooltips(tooltips);