修改思路

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> {private T value;public ColoredValue(T value) {this.value = value;}public T getValue() {return value;}abstract public Color getBgColor();
}

ColoredStringValue类

import java.awt.*;public class ColoredStringValue extends ColoredValue<String>{private boolean colored;public ColoredStringValue(String s, boolean colored) {super(s);this.colored = colored;}@Overridepublic Color getBgColor(){if (colored){return Color.RED;}else{return Color.WHITE;}}
}

MCellRenderer类

import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import java.awt.*;public class MCellRenderer extends DefaultTableCellRenderer {public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();@Overridepublic Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {Component component = super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);if(value instanceof ColoredValue) {ColoredValue v =(ColoredValue)value;component.setBackground(v.getBgColor());setValue(v.getValue());  //将值填入,如果ColoredValue有toString方法则无需这么做}else {component.setBackground(Color.WHITE);}return component;}

JTable代码

// 表头(列名)String[] columnNames = {"序号","报送日期","期号","标题","科室","拟稿人","备注"};// 设置滚动面板视口大小(超过该大小的行数据,需要拖动滚动条才能看到)//table.setSize(new Dimension(0, 600));// 创建滚动面板,把 表格 放到 滚动面板 中(表头将自动添加到滚动面板顶部)tmodel = new DefaultTableModel(columnNames, 0){@Overridepublic boolean isCellEditable(int row, int column) {if (column==1 || (column>7 && column<18)){return true;}return false;}};mainTable = new TempTable();mainTable.setModel(tmodel);mainTable.setDefaultRenderer(Object.class, new MCellRenderer()); //主要就是这行mainTable.setSelectionMode(SINGLE_SELECTION);//表格的列模型TableColumnModel cm = mainTable.getColumnModel();//设置列宽cm.getColumn(0).setPreferredWidth(30);cm.getColumn(1).setPreferredWidth(80);cm.getColumn(2).setMinWidth(100);cm.getColumn(3).setPreferredWidth(30);cm.getColumn(4).setMinWidth(100);// 把 表头 添加到容器顶部(使用普通的中间容器添加表格时,表头 和 内容 需要分开添加)tablePanel.add(mainTable,BorderLayout.CENTER);tablePanel.add(mainTable.getTableHeader(), BorderLayout.NORTH);

Java修改JTable单元格背景色相关推荐

  1. 【已解决】python 使用xlrd,xlwt 修改execl单元格的背景色

    [已解决]python 使用xlrd,xlwt 修改execl单元格的背景色 [解决过程] 之前查百度,问同事,一直没找到满意的答案,后来找到了几篇不相干的文章,自己整理整理,理解理解,总算是理出了令 ...

  2. element el-table组件修改表格表头和某个单元格背景色

    element el-table组件修改表格表头和某个单元格背景色 <template><div><el-table:data="tableData" ...

  3. 【poi第五节】poi设置Excel单元格边框 和 背景色,java设置Excel 单元格边框 和 背景色

    poi设置Excel单元格边框 和 背景色,java设置Excel 单元格边框 和 背景色 import org.apache.poi.hssf.usermodel.HSSFWorkbook; imp ...

  4. poi修改excel单元格值导致单元格变成橙色的问题(WPS)

    问题描述:在Java程序中将一个单元格的值改成空,结果导出excel后,用WPS软件打开,发现这个单元格背景色变成橙色,但是当这个单元格激活输入模式后,橙色又消失了.如下图: 在单元格中输入值后,橙色 ...

  5. Java Excel 复制单元格 poi Excel 复制单元格 Java Excel 复制行 Java Excel 复制 sheet 页 poi excel copy

    Java Excel 复制单元格 poi Excel 复制单元格 Java Excel 复制行 Java Excel 复制 sheet 页 一.前言 1.本文记录 poi excel 实现 单元格ce ...

  6. POI导出Excel设置单元格背景色

    POI导出Excel设置单元格背景色 导出Excel的时候,没有设置背景色,用2003版本的Excel工具打开会出现文档单元格背景自动填充黑色的情况,没有找到好的解决方法,就主动给他填充一种颜色,问题 ...

  7. elementui中el-table表格根据不同的值设置单元格背景色

    elementui中 el-table根据不同的值设置单元格背景色 //1.需要在表头设置cell-class-name //单元格的 className 的回调方法,也可以使用字符串为所有单元格设置 ...

  8. node操作excel6 node-xlsx设置单元格背景色

    目录 背景 设置单元格背景色 背景 <node操作excel>系列里头第二篇<node操作excel2 利用node_xlsx设置单元格边宽>,我们已经讲解了如何设置单元格的边 ...

  9. poi设置excel单元格背景色

    poi任意设置excel单元格背景色 Cell cell = sheet.createRow(0).createCell(0); XSSFCellStyle cellStyle = (XSSFCell ...

最新文章

  1. 新书上市|鲁智深和镇关西是怎么吵起来的?
  2. 《图解机器学习-杉山将著》读书笔记---CH1
  3. html语言中div怎么起名,css如何命名?
  4. ffmpeg.c学习-1-框架分析及命令行解析
  5. WebBrowser控件使用相关
  6. JVM 运行机制及基本原理
  7. WebRTC之RFC协议下载(八)
  8. Oracle Windows ODBC 数据源配置。
  9. 世上最全计算机网络面试整理(附答案),不服来战!!
  10. 基于51单片机的步进电机驱动程序
  11. bandizip修改压缩文件内容_BandiZip解压添加压缩文件教程
  12. laravel-mix打包 js css
  13. UiPath PDF拆分与合并
  14. 什么是CDN,简单了解CDN
  15. QTableView如何设置表头宽度
  16. 中点画线完整算法c语言,中点画线算法
  17. Sublime Text全局搜索
  18. set echo on 与set echo off
  19. 秋冬饮品研发没思路?带你看新品5大趋势!
  20. 中芯国际二零一八年第二季度业绩公布

热门文章

  1. SUST OJ P5502
  2. 用python代码做个圣诞树,送给心爱的她
  3. 项目管理:PMP、IPMP、CPMP之间区别
  4. 如何用计算机制作探测器,自制自制金属探测器
  5. educoder 国标码转区位码实验(详细)
  6. 有声小说php采集站源码下载,PTCMS小说站源码 可听书 可下载 带自动采集和搭建视频教程...
  7. (转载)深度工作:充分使用每一份脑力
  8. 关于lichong_87的外键级联更新-延迟检查和触发器的实现一点补充
  9. 爱帮网CEO刘建国:垂直化是搜索发展的趋势
  10. UPC——2020年春混合个人训练第二十四场(DEFG)