JTable单元格是由单元格绘制器绘制出来的,这是一些执行TableCellRenderer接口的类。TableCellRenderer接口定义了唯一的getTableCellRendererComponent方法,返回对Component的引用,二Component则用来实现绘图操作。但是因为定义单独的类来执行TableCellRenderer比较方便,而且可以实现绘图操作,所以TablecellRenderer通常只返回对自己的引用。下面是传递给getTableCellRendererComponent()方法的几个参数:

  • 对JTable的引用,含有要绘制的单元格
  • 对单元格值的引用
  • boolean标记,用来表示单元格是否被选中
  • boolean标记,用来表示单元格是否为输入焦点
  • 绘制的单元格的行索引号
  • 绘制的单元格的列索引号
  
 public void setTableStyle(JTable table){
//设置表头 的绘制器
DefaultTableCellHeaderRenderer headerRender = new DefaultTableCellHeaderRenderer(){
private static final long serialVersionUID = 7012909291394175134L;
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
//绘制单元格的边框
setBorder(new MatteBorder(0,1,0,1, new Color(0x1A2730)));
setText((value == null) ? "" : value.toString());
setBackground(new Color(0x2d7e89));
setFont(new Font("宋体", Font.PLAIN,15));
return this;
}
};
headerRender.setHorizontalAlignment(JLabel.CENTER);
table.getTableHeader().setDefaultRenderer(headerRender);
//设置背景颜色
table.getTableHeader().setBackground( new Color(0x2d7e89));
table.getTableHeader().setForeground(Color.white);
//设置单元格的绘制器
DefaultTableCellRenderer cellRender = new DefaultTableCellRenderer(){
private static final long serialVersionUID = -3807459616324121906L;
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (isSelected){
//设置选中时 单元格的颜色
setBackground(new Color(0x6EBBCA));
}
else {
setBorder( new MatteBorder(0,1,0,1, new Color(0x1A2730)));
setBackground(new Color(0xDCEBED));
}
setText((value == null) ? "" : value.toString());
setFont(new Font("宋体", Font.BOLD,14));
return this;
}
};
cellRender.setHorizontalAlignment(JLabel.CENTER);
cellRender.setForeground(Color.RED);
table.setDefaultRenderer(Object.class, cellRender);
// 设置表是否绘制单元格周围的网格线。
table.setShowGrid(false);
//设置表是否绘制单元格之间的水平线
table.setShowHorizontalLines(false);
table.setBackground(new Color(0xDCEBED));
//设置单元格之间的间距
table.setIntercellSpacing(new Dimension(0,0)); table.getColumn(colname[colname.length - 1]).setMaxWidth(0);
table.getColumn(colname[colname.length - 1]).setMinWidth(0);
table.getColumn(colname[colname.length - 1]).setPreferredWidth(0);
}

运行结果

通过单元格绘制器,可以设置指定单元格或者指定列指定行的颜色字体,甚至可以根据单元格的值不同,显示不同的颜色等等。

代码示例如下

 /**
* 当编号在5~7之间 设为蓝色
* @param table
*/
public void setTableStyleByID(JTable table){
//设置表头 的绘制器
DefaultTableCellHeaderRenderer headerRender = new DefaultTableCellHeaderRenderer(){
private static final long serialVersionUID = 7012909291394175134L;
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
//绘制单元格的边框
setBorder(new MatteBorder(0,1,0,1, new Color(0x1A2730)));
setText((value == null) ? "" : value.toString());
setBackground(new Color(0x2d7e89));
setFont(new Font("宋体", Font.PLAIN,15));
return this;
}
};;
headerRender.setHorizontalAlignment(JLabel.CENTER);
table.getTableHeader().setDefaultRenderer(headerRender);
//设置背景颜色
table.getTableHeader().setBackground( new Color(0x2d7e89));
table.getTableHeader().setForeground(Color.white);
//设置单元格的绘制器
DefaultTableCellRenderer cellRender = new DefaultTableCellRenderer(){
private static final long serialVersionUID = -3807459616324121906L;
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
int var = Integer.valueOf(table.getModel().getValueAt(row, 0).toString()); if (isSelected){
//设置选中时 单元格的颜色
setBackground(Color.BLACK);
}
else {
if (var >=5 && var <=7){
setBackground(Color.BLUE);
}else{
setBackground(new Color(0xDCEBED));
}
setBorder( new MatteBorder(0,1,0,1, new Color(0x1A2730)));
}
setText((value == null) ? "" : value.toString());
setFont(new Font("宋体", Font.BOLD,14));
return this;
}
};
cellRender.setHorizontalAlignment(JLabel.CENTER);
cellRender.setForeground(Color.RED);
table.setDefaultRenderer(Object.class, cellRender);
// 设置表是否绘制单元格周围的网格线。
table.setShowGrid(false);
//设置表是否绘制单元格之间的水平线
table.setShowHorizontalLines(false);
table.setBackground(new Color(0xDCEBED));
//设置单元格之间的间距
table.setIntercellSpacing(new Dimension(0,0)); table.getColumn(colname[colname.length - 1]).setMaxWidth(0);
table.getColumn(colname[colname.length - 1]).setMinWidth(0);
table.getColumn(colname[colname.length - 1]).setPreferredWidth(0);
}

运行结果

java表格的使用 单元格绘制二的更多相关文章

  1. FineUI大版本升级,外置ExtJS库、去AXD化、表格合计行、表格可编辑单元格的增删改、顶部菜单框架

    这是一篇很长的文章,在开始正文之前,请允许我代表目前排名前 20 中唯一的 .Net 开源软件 FineUI 拉下选票: 投票地址: https://code.csdn.net/2013OSSurve ...

  2. Swift - 给表格添加移动单元格功能(拖动行)

    1,下面的样例是给表格UITableView添加单元格移动功能: (1)给表格添加长按功能,长按后表格进入编辑状态  (2)在编辑状态下,可以看到单元格后面出现拖动按钮  (3)鼠标按住拖动按钮,可以 ...

  3. JS动态生成表格后 合并单元格

    JS动态生成表格后 合并单元格 最近做项目碰到表格中的单元格合并的问题,需求是这样的,首先发ajax请求 请求回来后的数据 动态生成表格数据,但是生成后如果编号或者(根据其他的内容)有相同时,要合并单 ...

  4. NX二次开发-UFUN工程图表格注释设置单元格首选项UF_TABNOT_set_cell_prefs

    NX9+VS2012 #include <uf.h> #include <uf_tabnot.h> #include <NXOpen/Part.hxx> #incl ...

  5. Excel表格如何保护单元格不被修改

    Excel如何保护单元格不被修改  有时使用Excel时希望保护单元格不被修改,这可以叫做单元格的“写保护”即把光标定位在一个不允许输入数据的区域内时,是无论如何也无法在里面输入数据的.下面咱们就一起 ...

  6. WebDriver获得表格里所有单元格的文本

    方法为: 1. 得到表格中所有的tr,存到list到中 2.对tr进行循环,根据当前的tr,得到当前所有td的集合存到list当中 3.循环中所有td里的文本 package com.example. ...

  7. Java删除word合并单元格时的重复值

    Spire.Doc提供了Table.applyVerticalMerge()方法来垂直合并word文档里面的表格单元格,Table.applyHorizontalMerge()方法来水平合并表格单元格 ...

  8. ASP.NET- 合并HTML的表格相同项单元格

    我对控件的依懒是比较少的.有几个控件我比较喜欢用,例如REPEATER显示列表的控件,能提供很大的方便. 使用REPEATER有一个比较方便的功能是通过几句代码就实现了相同项合并单元格合并,这个虽然平 ...

  9. layui:数据表格如何合并单元格

    layui.use('table', function () { var table = layui.table; table.render({ elem: '#applyTab' , url: '$ ...

随机推荐

  1. 【小白的CFD之旅】08 CFD速成之道

    学了那么一个星期的流体力学,又看了一周的计算流体力学,小白对于如何应用CFD解决工程流体问题,依然是一无所知.眼看一个月的时间已经过半,小白有点着急起来.于是在一个阳光明媚的早晨,小白又找到了黄师姐. ...

  2. 【小白的CFD之旅】02 江小白

    虽然已经是9月份了,但是西南地区的湿热天气依然将小白热成了狗.独自一个人来到这号称天府之国的西南城市,小白却一点都没感受到这天府之国的友好.毒辣的阳光像利剑一样照射到身上,让人感觉如在蒸笼中一样.从炎 ...

  3. js事件绑定及深入

    学习要点: 1.传统事件绑定的问题2.W3C事件处理函数3.IE事件处理函数4.事件对象的其他补充 事件绑定分为两种:一种是传统事件绑定(内联模型,脚本模型),一种是现代事件绑定(DOM2级模型).现 ...

  4. 【Python数据分析】Python3操作Excel-以豆瓣图书Top250为例

    本文利用Python3爬虫抓取豆瓣图书Top250,并利用xlwt模块将其存储至excel文件,图片下载到相应目录.旨在进行更多的爬虫实践练习以及模块学习. 工具 1.Python 3.5 2.Bea ...

  5. [转载]我的Java后端书架 (2016年暖冬4.0版)

      [转载]我的Java后端书架 (2016年暖冬4.0版) ps:最近正在初学Java,有一些其他语言的底子,但是还是要好好看书,好好练习,网上找了好久,都没有这份书单来的实用,特意转载过来,方便以 ...

  6. C# 把日期字符串转换为日期类型 (MM大写为月、小写为分钟)

    string dtStr; DateTime dtTime; 尝试把时间字符串转为DateTime格式 if (DateTime.TryParse(dtStr, out dtTime)) { //st ...

  7. Andorid 反编译App

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/23564065 开发的过程中,有时候可能会去使用别的app里面的图片,参考布局甚至 ...

  8. intel和AMD CPU性能对比(2016年CPU天梯图)组装电脑必读!

    http://www.365pcbuy.com/article-411.html 特别提示:此文已经于2016年10月12日更新!内容变动较大,请细细品鉴! 如何为客户推荐高性价比机型是我站的重要工作 ...

  9. PAT 1041. 考试座位号(15)

    每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座 ...

  10. 几个不错的webgl教程网

    http://ogldev.atspace.co.uk/index.html http://www.opengl-tutorial.org/ http://blog.wysaid.org/catego ...