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     }

运行结果

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

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

代码示例如下

 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     }


运行结果

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

你可能感兴趣的:(java)