Пропадает возможность выделения ячейки после применения рендерера с переносом слов

Необходимо переносить слова в третьем столбце. В связи с этим был добавлен renderer, который это реализовал. Однако после его добавления ячейка перестала выделяться.

введите сюда описание изображения

для 1,2,4 столбца (забудем что с нуля) применён DefaultTableCellRenderer, для 3 столбца такой код:

private static class CellRenderer extends JTextArea implements TableCellRenderer {
    private CellRenderer() {
        super();
        setLineWrap(true);
        setWrapStyleWord(true);
    }

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        int width = table.getColumnModel().getColumn(column).getWidth();
        setText((String) value);
        setSize(width, getPreferredSize().height);
        return this;
    }
}

setSelectionColor не работает. Много перепробовал, но ничего не помогает. Если применить данный рендерер к остальным ячейкам, то выделение пропадает у всех соответственно. Сейчас так:

    DefaultTableCellRenderer Renderer = new DefaultTableCellRenderer();
    CellRenderer wrap_renderer = new CellRenderer();        
    table.getColumnModel().getColumn(0).setCellRenderer(Renderer);
    table.getColumnModel().getColumn(1).setCellRenderer(Renderer);
    table.getColumnModel().getColumn(2).setCellRenderer(wrap_renderer);
    table.getColumnModel().getColumn(3).setCellRenderer(Renderer);

Ответы (1 шт):

Автор решения: Spatz

При создании своего рендерера полезно взглянуть на его стандартную реализацию.

Вот упрощенная реализация выделения:

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        if (isSelected) {
            setForeground(table.getSelectionForeground());
            setBackground(table.getSelectionBackground());
        } else {
            setForeground(table.getForeground());
            setBackground(table.getBackground());
        }
        // остальное без изменений
        int width = table.getColumnModel().getColumn(column).getWidth();
        setText((String) value);
        setSize(width, getPreferredSize().height);
        return this;
    }

→ Ссылка