【问题标题】:How to change color of row in JTable如何更改 JTable 中行的颜色
【发布时间】:2013-05-28 18:53:28
【问题描述】:

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

我定义了 JTable:

JTable table = new JTable(data, columnNames);

其中数据,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());

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

【问题讨论】:

  • 这应该可以。问题是你没有向我们展示什么。发布SSCCE
  • 我在帖子中添加了整个代码。

标签: java swing jtable row tablecellrenderer


【解决方案1】:

您最初正确设置了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);
    }
}

【讨论】:

  • 回答您之前的问题:您可以将所有内容放在循环中,如上所示
  • 抱歉 (-1k :-)for 整行是否有 prepareRenderer,您可以在 @camickr 帖子中看到
【解决方案2】:

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

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

如果您的实际要求是为行的所有列着色,请查看Table Row Rendering

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-29
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    相关资源
    最近更新 更多