java表格的使用 单元格绘制

来源:互联网 发布:床上用品品牌 知乎 编辑:程序博客网 时间:2024/06/05 17:48

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

  • 对JTable的引用,含有要绘制的单元格
  • 对单元格值的引用
  • boolean标记,用来表示单元格是否被选中
  • boolean标记,用来表示单元格是否为输入焦点
  • 绘制的单元格的行索引号
  • 绘制的单元格的列索引号
  
复制代码
 1 public void setTableStyle(JTable table){ 2         //设置表头    的绘制器     3         DefaultTableCellHeaderRenderer headerRender = new DefaultTableCellHeaderRenderer(){ 4             private static final long serialVersionUID = 7012909291394175134L; 5             public Component getTableCellRendererComponent(JTable table, Object value, 6                     boolean isSelected, boolean hasFocus, int row, int column) { 7                 //绘制单元格的边框 8                 setBorder(new MatteBorder(0,1,0,1, new Color(0x1A2730))); 9                 setText((value == null) ? "" : value.toString());10                 setBackground(new Color(0x2d7e89));11                 setFont(new Font("宋体", Font.PLAIN,15));12                 return this;13             }14         };15         headerRender.setHorizontalAlignment(JLabel.CENTER);16         table.getTableHeader().setDefaultRenderer(headerRender);    17         //设置背景颜色18         table.getTableHeader().setBackground( new Color(0x2d7e89));19         table.getTableHeader().setForeground(Color.white);20         //设置单元格的绘制器21         DefaultTableCellRenderer cellRender = new DefaultTableCellRenderer(){22             private static final long serialVersionUID = -3807459616324121906L;23             public Component getTableCellRendererComponent(JTable table, Object value,24                     boolean isSelected, boolean hasFocus, int row, int column) {25                 if (isSelected){26                     //设置选中时 单元格的颜色27                     setBackground(new Color(0x6EBBCA));28                 }29                 else {30                     setBorder( new MatteBorder(0,1,0,1, new Color(0x1A2730)));31                     setBackground(new Color(0xDCEBED));32                 }33                 setText((value == null) ? "" : value.toString());34                 setFont(new Font("宋体", Font.BOLD,14));35                 return this;36             }37         };38         cellRender.setHorizontalAlignment(JLabel.CENTER);39         cellRender.setForeground(Color.RED);40         table.setDefaultRenderer(Object.class, cellRender);41         // 设置表是否绘制单元格周围的网格线。42         table.setShowGrid(false);43         //设置表是否绘制单元格之间的水平线44         table.setShowHorizontalLines(false);45         table.setBackground(new Color(0xDCEBED));46         //设置单元格之间的间距47         table.setIntercellSpacing(new Dimension(0,0));48         49         table.getColumn(colname[colname.length - 1]).setMaxWidth(0); 50         table.getColumn(colname[colname.length - 1]).setMinWidth(0);51         table.getColumn(colname[colname.length - 1]).setPreferredWidth(0);52     }
复制代码

运行结果

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

代码示例如下

复制代码
 1 /** 2      * 当编号在5~7之间 设为蓝色 3      * @param table 4      */ 5     public void setTableStyleByID(JTable table){ 6         //设置表头    的绘制器     7         DefaultTableCellHeaderRenderer headerRender = new DefaultTableCellHeaderRenderer(){ 8             private static final long serialVersionUID = 7012909291394175134L; 9             public Component getTableCellRendererComponent(JTable table, Object value,10                     boolean isSelected, boolean hasFocus, int row, int column) {11                 //绘制单元格的边框12                 setBorder(new MatteBorder(0,1,0,1, new Color(0x1A2730)));13                 setText((value == null) ? "" : value.toString());14                 setBackground(new Color(0x2d7e89));15                 setFont(new Font("宋体", Font.PLAIN,15));16                 return this;17             }18         };;19         headerRender.setHorizontalAlignment(JLabel.CENTER);20         table.getTableHeader().setDefaultRenderer(headerRender);    21         //设置背景颜色22         table.getTableHeader().setBackground( new Color(0x2d7e89));23         table.getTableHeader().setForeground(Color.white);24         //设置单元格的绘制器25         DefaultTableCellRenderer cellRender = new DefaultTableCellRenderer(){26             private static final long serialVersionUID = -3807459616324121906L;27             public Component getTableCellRendererComponent(JTable table, Object value,28                     boolean isSelected, boolean hasFocus, int row, int column) {29                 int var = Integer.valueOf(table.getModel().getValueAt(row, 0).toString());30                 31                 if (isSelected){32                     //设置选中时 单元格的颜色33                     setBackground(Color.BLACK);34                 }35                 else {36                     if (var >=5 && var <=7){37                         setBackground(Color.BLUE);38                     }else{39                         setBackground(new Color(0xDCEBED));40                     }41                     setBorder( new MatteBorder(0,1,0,1, new Color(0x1A2730)));42                 }43                 setText((value == null) ? "" : value.toString());44                 setFont(new Font("宋体", Font.BOLD,14));45                 return this;46             }47         };48         cellRender.setHorizontalAlignment(JLabel.CENTER);49         cellRender.setForeground(Color.RED);50         table.setDefaultRenderer(Object.class, cellRender);51         // 设置表是否绘制单元格周围的网格线。52         table.setShowGrid(false);53         //设置表是否绘制单元格之间的水平线54         table.setShowHorizontalLines(false);55         table.setBackground(new Color(0xDCEBED));56         //设置单元格之间的间距57         table.setIntercellSpacing(new Dimension(0,0));58         59         table.getColumn(colname[colname.length - 1]).setMaxWidth(0); 60         table.getColumn(colname[colname.length - 1]).setMinWidth(0);61         table.getColumn(colname[colname.length - 1]).setPreferredWidth(0);62     }
复制代码


运行结果

0 0
原创粉丝点击