和风细雨

世上本无难事,心以为难,斯乃真难。苟不存一难之见于心,则运用之术自出。

表单元格渲染器的使用

使用表格渲染器渲染表格

在使用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;
       }
}

 

posted on 2008-03-03 23:07 和风细雨 阅读(1367) 评论(0)  编辑  收藏 所属分类: Swing


只有注册用户登录后才能发表评论。


网站导航: