java表格的应用 单位格绘制二

    添加时间:2013-7-12 点击量:

    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(0 x1A2730)));
    9 setText((value == null) ? : value.toString());
    10 setBackground(new Color(0 x2d7e89));
    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(0 x2d7e89));
    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(0 x6EBBCA));
    28 }
    29 else {
    30 setBorder( new MatteBorder(0,1,0,1, new Color(0 x1A2730)));
    31 setBackground(new Color(0 xDCEBED));
    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(0 xDCEBED));
    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(0 x1A2730)));
    13 setText((value == null) ? : value.toString());
    14 setBackground(new Color(0 x2d7e89));
    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(0 x2d7e89));
    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(0 xDCEBED));
    40 }
    41 setBorder( new MatteBorder(0,1,0,1, new Color(0 x1A2730)));
    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(0 xDCEBED));
    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 }




    运行成果







    彼此相爱,却不要让爱成了束缚:不如让它成为涌动的大海,两岸乃是你们的灵魂。互斟满杯,却不要同饮一杯。相赠面包,却不要共食一个。一起歌舞欢喜,却依然各自独立,相互交心,却不是让对方收藏。因为唯有生命之手,方能收容你们的心。站在一起却不要过于靠近。—— 纪伯伦《先知》
    分享到: