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