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