java表格的使用 单元格绘制二

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

  • 对JTable的引用,含有要绘制的单元格
  • 对单元格值的引用
  • boolean标记,用来表示单元格是否被选中
  • boolean标记,用来表示单元格是否为输入焦点
  • 绘制的单元格的行索引号
  • 绘制的单元格的列索引号

	public void setTableStyle(JTable table){
		//设置表头	的绘制器	
		DefaultTableCellHeaderRenderer headerRender = new DefaultTableCellHeaderRenderer(){
			private static final long serialVersionUID = 7012909291394175134L;
			public Component getTableCellRendererComponent(JTable table, Object value,
		            boolean isSelected, boolean hasFocus, int row, int column) {
				//绘制单元格的边框
		        setBorder(new MatteBorder(0,1,0,1, new Color(0x1A2730)));
		        setText((value == null) ? "" : value.toString());
		        setBackground(new Color(0x2d7e89));
		        setFont(new Font("宋体", Font.PLAIN,15));
		        return this;
		    }
		};
	    headerRender.setHorizontalAlignment(JLabel.CENTER);
	    table.getTableHeader().setDefaultRenderer(headerRender);	
		//设置背景颜色
	    table.getTableHeader().setBackground( new Color(0x2d7e89));
	    table.getTableHeader().setForeground(Color.white);
	    //设置单元格的绘制器
		DefaultTableCellRenderer cellRender = new DefaultTableCellRenderer(){
			private static final long serialVersionUID = -3807459616324121906L;
			public Component getTableCellRendererComponent(JTable table, Object value,
		            boolean isSelected, boolean hasFocus, int row, int column) {
		        if (isSelected){
		        	//设置选中时 单元格的颜色
		        	setBackground(new Color(0x6EBBCA));
		        }
		        else {
		        	setBorder( new MatteBorder(0,1,0,1, new Color(0x1A2730)));
		        	setBackground(new Color(0xDCEBED));
		        }
		        setText((value == null) ? "" : value.toString());
		        setFont(new Font("宋体", Font.BOLD,14));
		        return this;
		    }
		};
		cellRender.setHorizontalAlignment(JLabel.CENTER);
		cellRender.setForeground(Color.RED);
		table.setDefaultRenderer(Object.class, cellRender);
		// 设置表是否绘制单元格周围的网格线。
		table.setShowGrid(false);
		//设置表是否绘制单元格之间的水平线
		table.setShowHorizontalLines(false);
		table.setBackground(new Color(0xDCEBED));
		//设置单元格之间的间距
		table.setIntercellSpacing(new Dimension(0,0));
		
		table.getColumn(colname[colname.length - 1]).setMaxWidth(0); 
		table.getColumn(colname[colname.length - 1]).setMinWidth(0);
		table.getColumn(colname[colname.length - 1]).setPreferredWidth(0);
	}

运行结果

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

代码示例如下

	/**
	 * 当编号在5~7之间 设为蓝色
	 * @param table
	 */
	public void setTableStyleByID(JTable table){
		//设置表头	的绘制器	
		DefaultTableCellHeaderRenderer headerRender = new DefaultTableCellHeaderRenderer(){
			private static final long serialVersionUID = 7012909291394175134L;
			public Component getTableCellRendererComponent(JTable table, Object value,
		            boolean isSelected, boolean hasFocus, int row, int column) {
				//绘制单元格的边框
		        setBorder(new MatteBorder(0,1,0,1, new Color(0x1A2730)));
		        setText((value == null) ? "" : value.toString());
		        setBackground(new Color(0x2d7e89));
		        setFont(new Font("宋体", Font.PLAIN,15));
		        return this;
		    }
		};;
		headerRender.setHorizontalAlignment(JLabel.CENTER);
		table.getTableHeader().setDefaultRenderer(headerRender);	
		//设置背景颜色
	    table.getTableHeader().setBackground( new Color(0x2d7e89));
	    table.getTableHeader().setForeground(Color.white);
	    //设置单元格的绘制器
		DefaultTableCellRenderer cellRender = new DefaultTableCellRenderer(){
			private static final long serialVersionUID = -3807459616324121906L;
			public Component getTableCellRendererComponent(JTable table, Object value,
		            boolean isSelected, boolean hasFocus, int row, int column) {
				int var = Integer.valueOf(table.getModel().getValueAt(row, 0).toString());
				
		        if (isSelected){
		        	//设置选中时 单元格的颜色
		        	setBackground(Color.BLACK);
		        }
		        else {
		        	if (var >=5 && var <=7){
		        		setBackground(Color.BLUE);
		        	}else{
		        		setBackground(new Color(0xDCEBED));
		        	}
		        	setBorder( new MatteBorder(0,1,0,1, new Color(0x1A2730)));
		        }
		        setText((value == null) ? "" : value.toString());
		        setFont(new Font("宋体", Font.BOLD,14));
		        return this;
		    }
		};
		cellRender.setHorizontalAlignment(JLabel.CENTER);
		cellRender.setForeground(Color.RED);
		table.setDefaultRenderer(Object.class, cellRender);
		// 设置表是否绘制单元格周围的网格线。
		table.setShowGrid(false);
		//设置表是否绘制单元格之间的水平线
		table.setShowHorizontalLines(false);
		table.setBackground(new Color(0xDCEBED));
		//设置单元格之间的间距
		table.setIntercellSpacing(new Dimension(0,0));
		
		table.getColumn(colname[colname.length - 1]).setMaxWidth(0); 
		table.getColumn(colname[colname.length - 1]).setMinWidth(0);
		table.getColumn(colname[colname.length - 1]).setPreferredWidth(0);
	}

运行结果


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值