Пропадает возможность выделения ячейки после применения рендерера с переносом слов
Необходимо переносить слова в третьем столбце. В связи с этим был добавлен 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;
}
