zoukankan      html  css  js  c++  java
  • java表格的使用 单元格绘制二

    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     }


    运行结果


  • 相关阅读:
    13 110内容回、111内容回顾、redis操作
    11 git第二部分(未完成)
    10 内容回顾和补充、分页加密
    09 深科技相关表结构 (未完成)、git
    $ python manage.py makemigrations You are trying to add a non-nullable field 'name' to course without a default; we can't do that (the database needs something to populate existing rows). Please selec
    6、DockerFile解析:三步走、保留字指令
    Linux 中各个文件夹的作用
    H.264 Profile-level-id
    H.264编码profile & level控制
    H.264分层结构与码流结构
  • 原文地址:https://www.cnblogs.com/freeabyss/p/3187045.html
Copyright © 2011-2022 走看看