1

我想更改 JTable 中整行的颜色。

我定义了 JTable:

JTable table = new JTable(data, columnNames);

其中 data, columnNames 是字符串表。

最常见的方法是编写自己的类:

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());

但它不起作用。我究竟做错了什么?

4

2 回答 2

2

我想更改 JTable 中整行的颜色。

您只是将渲染器添加到第一列,因此只有第一列会被着色,而不是整行。

如果您的实际要求是为行的所有列着色,请查看表格行渲染。

于 2013-06-02T19:20:08.287 回答
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);
    }
}
于 2013-06-02T12:55:00.343 回答