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); }
运行结果