修改思路
JTable单元格的渲染都通过TableCellRenderer这个接口进行,因此最合适的方式是通过继承默认的DefaultTableCellRenderer类并添加自己想要的功能。
通过查看代码可以发现,TableCellRenderer这个接口里只有如下一个方法
Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column);
该方法传入的value参数就是JTable或TableModel的getValueAt方法返回的值
public Object getValueAt(int row, int column)
为了能自由的控制单元格的背景色和前景色,我打算把颜色信息放到value参数中,因此我自定义了一个类型
import java.awt.*;
abstract public class ColoredValue<T> {
private T value;
public ColoredValue(T value) {
this.value = value;
}
public T getValue() {
return value;
}
abstract public Color getBgColor();
}
ColoredValue这个类型就两个方法,getValue是用来获取里面储存的值,当然,通过实现toString方法也可以,反正最后都要转成String填在表格里面。getBgColor是用来获取该值需要的背景色。这样一来,我们只需要把值和颜色信息都存入ColoredValue对象,那么就可以在getTableCellRendererComponent方法调用时得到颜色信息。
完整代码实现
ColoredValue类
import java.awt.*;
abstract public class ColoredValue<T> {
pri