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     }
运行成果

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




