java表格的使用 单元格绘制二
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表格的使用 单元格绘制二的更多相关文章
- FineUI大版本升级,外置ExtJS库、去AXD化、表格合计行、表格可编辑单元格的增删改、顶部菜单框架
这是一篇很长的文章,在开始正文之前,请允许我代表目前排名前 20 中唯一的 .Net 开源软件 FineUI 拉下选票: 投票地址: https://code.csdn.net/2013OSSurve ...
- Swift - 给表格添加移动单元格功能(拖动行)
1,下面的样例是给表格UITableView添加单元格移动功能: (1)给表格添加长按功能,长按后表格进入编辑状态 (2)在编辑状态下,可以看到单元格后面出现拖动按钮 (3)鼠标按住拖动按钮,可以 ...
- JS动态生成表格后 合并单元格
JS动态生成表格后 合并单元格 最近做项目碰到表格中的单元格合并的问题,需求是这样的,首先发ajax请求 请求回来后的数据 动态生成表格数据,但是生成后如果编号或者(根据其他的内容)有相同时,要合并单 ...
- NX二次开发-UFUN工程图表格注释设置单元格首选项UF_TABNOT_set_cell_prefs
NX9+VS2012 #include <uf.h> #include <uf_tabnot.h> #include <NXOpen/Part.hxx> #incl ...
- Excel表格如何保护单元格不被修改
Excel如何保护单元格不被修改 有时使用Excel时希望保护单元格不被修改,这可以叫做单元格的“写保护”即把光标定位在一个不允许输入数据的区域内时,是无论如何也无法在里面输入数据的.下面咱们就一起 ...
- WebDriver获得表格里所有单元格的文本
方法为: 1. 得到表格中所有的tr,存到list到中 2.对tr进行循环,根据当前的tr,得到当前所有td的集合存到list当中 3.循环中所有td里的文本 package com.example. ...
- Java删除word合并单元格时的重复值
Spire.Doc提供了Table.applyVerticalMerge()方法来垂直合并word文档里面的表格单元格,Table.applyHorizontalMerge()方法来水平合并表格单元格 ...
- ASP.NET- 合并HTML的表格相同项单元格
我对控件的依懒是比较少的.有几个控件我比较喜欢用,例如REPEATER显示列表的控件,能提供很大的方便. 使用REPEATER有一个比较方便的功能是通过几句代码就实现了相同项合并单元格合并,这个虽然平 ...
- layui:数据表格如何合并单元格
layui.use('table', function () { var table = layui.table; table.render({ elem: '#applyTab' , url: '$ ...
随机推荐
- Spring多种注入方式及注解实现DI
一.Bean作用域 spring容器创建的时候,会将所有配置的bean对象创建出来,默认bean都是单例的.代码通过getBean()方法从容器获取指定的bean实例,容器首先会调用Bean类的无参构 ...
- CHM打不开的解决方法
CHM打不开的解决方法 听语音 | 浏览:62240 | 更新:2013-02-04 14:58 | 标签:软件 1 2 3 4 5 6 分步阅读 一键约师傅 百度师傅高质屏和好师傅,拯救你的碎屏机 ...
- [bzoj1901][zoj2112][Dynamic Rankings] (整体二分+树状数组 or 动态开点线段树 or 主席树)
Dynamic Rankings Time Limit: 10 Seconds Memory Limit: 32768 KB The Company Dynamic Rankings has ...
- 从数据库导出到excel
在项目 扬中 News shenbaocreateall //选中的id string cc = Request["IDcheck"]; Response.C ...
- 学习C++.Primer.Plus 10 对象和类
1.类的声明和定义 类的声明和定义. 类声明的格式如下: class className { private://private 是类对象的默认访问控制,因此,可以省略 data member del ...
- sql server 使用nolock提升性能
博客园有许多关于nolock的文章,大部分都写得很好,例如:http://www.cnblogs.com/huangxincheng/p/4292320.html 这里仅结合个人项目,作为个人笔记记录 ...
- Sort using in VS
- 方法构造和方法重载之奥特曼与大boss之战
知识点的总结: 1.类中的方法分为两类:1.普通方法: 2.构造方法. 2.构造方法的格式: public 类名(数据类型 参数名,...){ } 3.构造方法的用途: 1.实例化对象. 2. ...
- go 数据类型转换
使用strconv 包 首先需要import strconv包 //string to int i,err := strconv.Atoi(str) // string to int64 i64,er ...
- table寻找兄弟列的值
function showCover(videoidtemp,curRow){ // curRow为当前元素.寻找当前元素的父元素,寻找父元素中class为tdd的元素..html() 是单元格td中 ...