继往开来 吐故纳新
日历
网志分类
· 所有网志 (990)
· 个人作品 (62)
· 软件设计 (33)
· 面向对象编程 (22)
· JavaAPI (39)
· Java开源工具 (31)
· Swing (34)
· Java语法细节 (39)
· 样式表CSS (12)
· XML (10)
· J2EE(JavaEE) (23)
· 算法数据结构 (64)
· 正则表达式 (4)
· 软件知识 (6)
· Java线程 (9)
· Web开发.Jsp/Servlet/Struts (20)
· 程序随想录 (7)
· Spring (5)
· Hibernate (7)
· J2SE 高级 (2)
· J2SE 高级 (0)
· Web开发.Ajax (16)
· Web开发.JavaScript (43)
· DB4O (2)
· Web开发.CSS/Html (22)
· C# (20)
· ERP (4)
· JDBC (1)
· 编程资源 (16)
· 编程感悟 (29)
· DB/Sql (13)
· VB (29)
· VC (2)
· 桌面脚本 (3)
· 新兴软件 (3)
· 英语学习 (21)
· 网文转载 (159)
· 职场风云 (39)
· 诗词歌赋 (32)
· 生活感言 (77)
· 奇文共赏 (13)
· 财经纵横 (6)
· 未分类 (11)
站内搜索
友情链接
· 歪酷博客
· 我的歪酷 非非共享界
· 偶要雷锋
· 豆瓣
· nczonline
· 当当网
· easyjf中文站
· Donews
· 天极Java文章列表
· W3CSchool
· taiten的BLOG
· Dojo中国
· Dojo
· Extjs.com
· Lifehack中文网志
· JaveEye的一个AS专题
· Banq's JDon
· Java 中文网址大全
· 梦想Java
· 360Doc个人图书馆
· java开源大全
· 我在硅谷动力的软件下载站
· 站长中国
· 随意贴
· CSS教学素材站
· java 参考中文站
· 面向构件与SOA社区
· 彩字生成
· 派派小说论坛
· 如坐春风
· 英语学习网
· BBC CHina
· www.dlbang.com
· 古文竖排格式在线转化工具
· 免费家谱
· 图片上传基地
· 风景壁纸
· 和风细雨
· MyC#BlogInCsdn

订阅 RSS

0203515

歪酷博客

开此博一为经验积累,二为资料收集,三为同道交流,四为资源共享.
« 上一篇: 【原创】集合综述 下一篇: 【原创】JTree树控件的使用 »
Junglesong @ 2008-04-05 14:29

使用表格渲染器渲染表格

在使用JTable时,用户往往希望改变它缺省的渲染方式,比如使用间隔色的行,对特定的单元格进行特殊颜色显示等,这对一些可视化编程环境的表格并不是一件容易的事。
在Java Swing编程中我们可以使用DefaultTableCellRenderer的子类渲染表格来达到这个目的,实现和使用它都非常容易。

渲染效果一:


步骤一:实现一个javax.swing.table.DefaultTableCellRenderer的子类

/**
* 间隔色表格渲染类
*/
public class ColorTableCellRenderer extends DefaultTableCellRenderer {
  private static final long serialVersionUID = -3378036327580475639L;

  public Component getTableCellRendererComponent(
               JTable table,
               Object value,
               boolean isSelected,
               boolean hasFocus,
               int row,
               int column) {
   
               // 得到单元格
               Component cell =
                       super.getTableCellRendererComponent(
                               table,
                               value,
                               isSelected,
                               hasFocus,
                               row,
                               column);
               // 进行渲染
               if (hasFocus) {
                 // 如果获得焦点则设置背景色为红色
                   cell.setBackground(Color.red);
                   //cell.setForeground(Color.black);
               } else {
                   if ((row % 2) == 0) {
                     // 偶数行设置为白色
                       cell.setBackground(Color.white);
                   } else {
                     // 奇数行设置为蓝色
                       cell.setBackground(Color.cyan);
                   }
               }
              
               return cell;
       }
}

步骤二:将ColorTableCellRenderer设置为表格的渲染器

 try {
 ColorTableCellRenderer cellRender = new ColorTableCellRenderer();
 table.setDefaultRenderer(Class.forName("java.lang.Object"),
  cellRender);
} catch (Exception e) {
 e.printStackTrace();
}

实现一个将特定单元格设置为红色的表格渲染器

如右,如果想将成员年龄大于37的单元格设置为红色。


AgeTableCellRenderer的代码

public class AgeTableCellRenderer extends DefaultTableCellRenderer {
  private static final long serialVersionUID = -334535475639L;

  public Component getTableCellRendererComponent(
               JTable table,
               Object value,
               boolean isSelected,
               boolean hasFocus,
               int row,
               int column) {
   
               // 得到单元格
               Component cell =
                       super.getTableCellRendererComponent(
                               table,
                               value,
                               isSelected,
                               hasFocus,
                               row,
                               column);

               // 先把所有单元格设置为白色
               cell.setBackground(Color.white);
              
               // 进行渲染
               if (table.getColumnName(column).equals("年龄") ) { // 如果列名等于“年龄”
                 // 取得单元格的文字
                 String strValue=(String)value;
                
                 if(Pattern.matches("\d+", strValue)){
                   if(Integer.parseInt(strValue)>37){
                     // 如果是数字且值大于37,将单元格背景设置为红色
                     cell.setBackground(Color.red);
                   }                  
                 }
               }
              
               return cell;
       }
}




评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定