Java修改JTable单元格背景色
修改思路
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单元格背景色相关推荐
- 【已解决】python 使用xlrd,xlwt 修改execl单元格的背景色
[已解决]python 使用xlrd,xlwt 修改execl单元格的背景色 [解决过程] 之前查百度,问同事,一直没找到满意的答案,后来找到了几篇不相干的文章,自己整理整理,理解理解,总算是理出了令 ...
- element el-table组件修改表格表头和某个单元格背景色
element el-table组件修改表格表头和某个单元格背景色 <template><div><el-table:data="tableData" ...
- 【poi第五节】poi设置Excel单元格边框 和 背景色,java设置Excel 单元格边框 和 背景色
poi设置Excel单元格边框 和 背景色,java设置Excel 单元格边框 和 背景色 import org.apache.poi.hssf.usermodel.HSSFWorkbook; imp ...
- poi修改excel单元格值导致单元格变成橙色的问题(WPS)
问题描述:在Java程序中将一个单元格的值改成空,结果导出excel后,用WPS软件打开,发现这个单元格背景色变成橙色,但是当这个单元格激活输入模式后,橙色又消失了.如下图: 在单元格中输入值后,橙色 ...
- 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 ...
- POI导出Excel设置单元格背景色
POI导出Excel设置单元格背景色 导出Excel的时候,没有设置背景色,用2003版本的Excel工具打开会出现文档单元格背景自动填充黑色的情况,没有找到好的解决方法,就主动给他填充一种颜色,问题 ...
- elementui中el-table表格根据不同的值设置单元格背景色
elementui中 el-table根据不同的值设置单元格背景色 //1.需要在表头设置cell-class-name //单元格的 className 的回调方法,也可以使用字符串为所有单元格设置 ...
- node操作excel6 node-xlsx设置单元格背景色
目录 背景 设置单元格背景色 背景 <node操作excel>系列里头第二篇<node操作excel2 利用node_xlsx设置单元格边宽>,我们已经讲解了如何设置单元格的边 ...
- poi设置excel单元格背景色
poi任意设置excel单元格背景色 Cell cell = sheet.createRow(0).createCell(0); XSSFCellStyle cellStyle = (XSSFCell ...
最新文章
- 新书上市|鲁智深和镇关西是怎么吵起来的?
- 《图解机器学习-杉山将著》读书笔记---CH1
- html语言中div怎么起名,css如何命名?
- ffmpeg.c学习-1-框架分析及命令行解析
- WebBrowser控件使用相关
- JVM 运行机制及基本原理
- WebRTC之RFC协议下载(八)
- Oracle Windows ODBC 数据源配置。
- 世上最全计算机网络面试整理(附答案),不服来战!!
- 基于51单片机的步进电机驱动程序
- bandizip修改压缩文件内容_BandiZip解压添加压缩文件教程
- laravel-mix打包 js css
- UiPath PDF拆分与合并
- 什么是CDN,简单了解CDN
- QTableView如何设置表头宽度
- 中点画线完整算法c语言,中点画线算法
- Sublime Text全局搜索
- set echo on 与set echo off
- 秋冬饮品研发没思路?带你看新品5大趋势!
- 中芯国际二零一八年第二季度业绩公布
热门文章
- SUST OJ P5502
- 用python代码做个圣诞树,送给心爱的她
- 项目管理:PMP、IPMP、CPMP之间区别
- 如何用计算机制作探测器,自制自制金属探测器
- educoder 国标码转区位码实验(详细)
- 有声小说php采集站源码下载,PTCMS小说站源码 可听书 可下载 带自动采集和搭建视频教程...
- (转载)深度工作:充分使用每一份脑力
- 关于lichong_87的外键级联更新-延迟检查和触发器的实现一点补充
- 爱帮网CEO刘建国:垂直化是搜索发展的趋势
- UPC——2020年春混合个人训练第二十四场(DEFG)