Как изменить цвет строки в JTable

Я хочу изменить цвет всей строки в моем JTable.

Я определил JTable:

JTable table = new JTable(data, columnNames);

где data, columnNames — это таблицы String.

Наиболее распространенный способ сделать это — написать собственный класс:

public class StatusColumnCellRenderer extends DefaultTableCellRenderer {

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {

            //Cells are by default rendered as a JLabel.
            JLabel l = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);

            //Get the status for the current row.

            l.setBackground(Color.GREEN);

            //Return the JLabel which renders the cell.
            return l;
        }
    }

и позвоните:

this.table.getColumnModel().getColumn(0).setCellRenderer(new StatusColumnCellRenderer());

Но это не работает. Что я делаю не так?


person Mariusz Jucha    schedule 02.06.2013    source источник
comment
Это должно работать. Проблема в том, что вы нам не показываете. Опубликовать SSCCE   -  person Reimeus    schedule 02.06.2013
comment
Я добавил весь код в свой пост.   -  person Mariusz Jucha    schedule 02.06.2013


Ответы (2)


Сначала вы правильно устанавливаете TableCellRenderer, но затем заменяете его следующим кодом:

for (int i = 0 ; i < table.getColumnCount(); i++)
   table.getColumnModel().getColumn(i).setCellRenderer( centerRenderer );

Измените его так, чтобы он устанавливал средство визуализации цветных ячеек с правильным индексом (и добавьте фигурные скобки (!)):

for (int i = 0; i < table.getColumnCount(); i++) {
    TableColumn column = table.getColumnModel().getColumn(i);
    if (i == COLOR_COLUMN) { // COLOR_COLUMN = 1
        column.setCellRenderer(new StatusColumnCellRenderer());
    } else { 
        column.setCellRenderer(centerRenderer);
    }
}
person Reimeus    schedule 02.06.2013
comment
Чтобы ответить на ваш предыдущий вопрос: вы можете поместить все в цикл, показанный выше. - person Reimeus; 02.06.2013
comment
извините (-1k :-) для всей строки есть prepareRenderer, как вы можете видеть в сообщении @camickr - person mKorbel; 03.06.2013

Я хочу изменить цвет всей строки в моем JTable.

Вы добавляете средство визуализации только к первому столбцу, поэтому будет окрашен только первый столбец, а не вся строка.

Ознакомьтесь с разделом Отображение строки таблицы, если вам действительно требуется цвет все столбцы строки.

person camickr    schedule 02.06.2013