1 package org.wcb.gui.renderer.jtable;
2
3 import java.awt.Component;
4 import java.awt.Dimension;
5 import java.util.Iterator;
6 import java.util.Vector;
7 import javax.swing.*;
8 import javax.swing.table.DefaultTableCellRenderer;
9 import javax.swing.table.JTableHeader;
10 import javax.swing.table.TableCellRenderer;
11 import javax.swing.table.TableColumn;
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 public class ColumnGroup {
39
40
41
42 protected TableCellRenderer renderer;
43
44
45
46
47 protected Vector v;
48
49
50
51 protected String text;
52
53
54
55 protected int margin=0;
56
57
58
59
60
61
62 public ColumnGroup(String text) {
63 this(null,text);
64 }
65
66
67
68
69
70
71
72 public ColumnGroup(TableCellRenderer renderer,String text) {
73 if (renderer == null) {
74 this.renderer = new DefaultTableCellRenderer() {
75 public Component getTableCellRendererComponent(JTable table, Object value,
76 boolean isSelected, boolean hasFocus, int row, int column) {
77 JTableHeader header = table.getTableHeader();
78
79 if (header != null) {
80 setForeground(header.getForeground());
81 setBackground(header.getBackground());
82 setFont(header.getFont());
83 }
84 setHorizontalAlignment(JLabel.CENTER);
85 setText((value == null) ? "" : value.toString());
86 setBorder(UIManager.getBorder("TableHeader.cellBorder"));
87 return this;
88 }
89 };
90 } else {
91 this.renderer = renderer;
92 }
93 this.text = text;
94 v = new Vector();
95 }
96
97
98
99
100
101
102
103 public void add(Object obj) {
104 if (obj == null) { return; }
105 v.addElement(obj);
106 }
107
108
109
110
111
112
113
114
115
116 public Vector getColumnGroups(TableColumn c, Vector g) {
117 g.addElement(this);
118 if (v.contains(c)) return g;
119 Iterator iter = v.iterator();
120 while (iter.hasNext()) {
121 Object obj = iter.next();
122 if (obj instanceof ColumnGroup) {
123 Vector groups =
124 (Vector)((ColumnGroup)obj).getColumnGroups(c,(Vector)g.clone());
125 if (groups != null) return groups;
126 }
127 }
128 return null;
129 }
130
131
132
133
134
135 public TableCellRenderer getHeaderRenderer() {
136 return renderer;
137 }
138
139
140
141
142
143 public void setHeaderRenderer(TableCellRenderer renderer) {
144 if (renderer != null) {
145 this.renderer = renderer;
146 }
147 }
148
149
150
151
152
153 public Object getHeaderValue() {
154 return text;
155 }
156
157
158
159
160
161
162 public Dimension getSize(JTable table) {
163 Component comp = renderer.getTableCellRendererComponent(
164 table, getHeaderValue(), false, false,-1, -1);
165 int height = comp.getPreferredSize().height;
166 int width = 0;
167 Iterator iter = v.iterator();
168 while (iter.hasNext()) {
169 Object obj = iter.next();
170 if (obj instanceof TableColumn) {
171 TableColumn aColumn = (TableColumn)obj;
172 width += aColumn.getWidth();
173 }
174 else {
175 width += ((ColumnGroup)obj).getSize(table).width;
176 }
177 }
178 return new Dimension(width, height);
179 }
180
181
182
183
184
185
186 public void setColumnMargin(int margin) {
187 this.margin = margin;
188 Iterator iter = v.iterator();
189 while (iter.hasNext()) {
190 Object obj = iter.next();
191 if (obj instanceof ColumnGroup) {
192 ((ColumnGroup)obj).setColumnMargin(margin);
193 }
194 }
195 }
196 }