Setting a tooltip for a value from JComboBox's Items as CellEditor in JTable

前端 未结 2 1457
抹茶落季
抹茶落季 2020-12-11 13:08

I would like to set a tooltip value for the values in a custom combo box. Basically, my combobox contains a list of initials of people - when they hover over i want it to di

2条回答
  •  既然无缘
    2020-12-11 13:52

    If you want tooltips in the editing combobox, you'll have to so in a custom renderer of that combobox. Below is a short example:

    // some data
    User[] users = new User[] { 
            new User("Clara Zetkin", "CZ"),
            new User("Rosa Luxemburg", "RL"),
            new User("Susan Sontag", "SS"),
    };
    // the renderer for use in the editor
    ListCellRenderer comboRenderer = new DefaultListCellRenderer() {
    
        @Override
        public Component getListCellRendererComponent(JList list,
                Object value, int index, boolean isSelected,
                boolean cellHasFocus) {
            if (value instanceof User) {
                setToolTipText(((User) value).getName());
                value = ((User) value).getInitials();
            } else {
                setToolTipText(null);
            }
            return super.getListCellRendererComponent(list, value, index, isSelected,
                    cellHasFocus);
        }
    
    };
    JComboBox editingCombo = new JComboBox(users);
    editingCombo.setRenderer(comboRenderer);
    
    JTable table = new JTable(3, 2);
    // set up the editor for the first column
    table.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(editingCombo));
    // the renderer to use in the table
    TableCellRenderer renderer = new DefaultTableCellRenderer() {
    
        @Override
        protected void setValue(Object value) {
            if (value instanceof User) {
                setToolTipText(((User) value).getInitials());
                value = ((User) value).getName();
            } else {
                setToolTipText(null);
            }
            super.setValue(value);
        }
    
    };
    table.getColumnModel().getColumn(0).setCellRenderer(renderer);
    

提交回复
热议问题