不要重写prepareRenderer()方法。通常,只有当您希望渲染对输入行有效时,您才会重写此方法。这种方法很有用,因为渲染代码位于一个位置,您不必为表中的每一列创建自定义渲染器。
但是,为了特定列中单元格的特定渲染,您应该为该列创建自定义渲染器。
阅读 Swing 教程中的部分使用自定义渲染器 http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer了解更多信息和示例。
本教程示例实现了 TableCellRenderer 接口。扩展默认渲染器可能更容易:
class ColorRenderer extends DefaultTableCellRenderer
{
@Override
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (!isSelected)
{
int viewColumn = convertColumnIndexToView(1)
String value = getModel().getValueAt(rowIndex, viewColumn).toString();
if ("Online".equalsIgnoreCase(value))
setBackground( Color.GREEN );
else
setBackground( Color.lightgray );
return this;
}
}
}
请注意,您应该转换列索引,以防用户对表中的列重新排序。
然后要使用渲染,您可以使用以下方法将其添加到各个列:
TableCellRenderer colorRenderer = new ColorRenderer();
table.getColumnModel().getColumn(1).setCellRenderer( colorRenderer );