В первом параметре для setDefaultRenderer
поместите литерал class для класса, который вы хотите переопределить для рендеринга. То есть, если ваши данные состоят из всех строк, вы можете поставить
myTable.setDefaultRenderer(String.class, new CustomRenderer());
Если ваши данные также состоят из значений с BigDecimal
или Integer
в качестве классов, вы должны вызывать этот метод несколько раз для каждого типа класса (BigDecimal.class
или Integer.class
в каждом случае).
И, наконец, чтобы изменить цвет фона, вы делаете это в рендере:
class CustomRenderer extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
c.setBackground(new java.awt.Color(255, 72, 72));
return c;
}
}
Если вы напишете средство визуализации, которое должно работать для всех классов интерфейса , вам также потребуется изменить функцию getColumnClass
вашей табличной модели и позволить ей вернуть класс интерфейса для всех объектов, которые реализуют этот интерфейс:
public Class<? extends Object> getColumnClass(int c) {
Object object = getValueAt(0, c);
if(object == null) {
return Object.class;
if(getValueAt(0, c) instanceof IColorable) {
return ICarPart.class;
} else {
return getValueAt(0, c).getClass();
}
}
При этом можно зарегистрировать средство визуализации для IColorable.class и не нужно регистрировать отдельное средство визуализации для каждой реализации.