1:
37:
38:
39: package ;
40:
41: import ;
42: import ;
43: import ;
44: import ;
45: import ;
46:
47: import ;
48: import ;
49: import ;
50: import ;
51: import ;
52: import ;
53: import ;
54: import ;
55: import ;
56: import ;
57: import ;
58: import ;
59:
60: public class BasicTableHeaderUI
61: extends TableHeaderUI
62: {
63:
64: public static ComponentUI createUI(JComponent h)
65: {
66: return new BasicTableHeaderUI();
67: }
68:
69: protected JTableHeader header;
70: protected MouseInputListener mouseInputListener;
71: protected CellRendererPane rendererPane;
72: protected Border cellBorder;
73:
74: class MouseInputHandler
75: implements MouseInputListener
76: {
77: public void mouseClicked(MouseEvent e) {}
78: public void mouseDragged(MouseEvent e) {}
79: public void mouseEntered(MouseEvent e) {}
80: public void mouseExited(MouseEvent e) {}
81: public void mouseMoved(MouseEvent e) {}
82: public void mousePressed(MouseEvent e) {}
83: public void mouseReleased(MouseEvent e) {}
84: }
85:
86: protected MouseInputListener createMouseInputListener()
87: {
88: return new MouseInputHandler();
89: }
90:
91: public BasicTableHeaderUI()
92: {
93: mouseInputListener = createMouseInputListener();
94: }
95:
96: protected void installDefaults()
97: {
98: UIDefaults defaults = UIManager.getLookAndFeelDefaults();
99: header.setBackground(defaults.getColor("TableHeader.background"));
100: header.setForeground(defaults.getColor("TableHeader.foreground"));
101: header.setFont(defaults.getFont("TableHeader.font"));
102: cellBorder = defaults.getBorder("TableHeader.cellBorder");
103: }
104:
105: protected void installKeyboardActions()
106: {
107: }
108:
109: protected void installListeners()
110: {
111: header.addMouseListener(mouseInputListener);
112: }
113:
114: public void installUI(JComponent c)
115: {
116: header = (JTableHeader) c;
117: installDefaults();
118: installKeyboardActions();
119: installListeners();
120: }
121:
122: protected void uninstallDefaults()
123: {
124: header.setBackground(null);
125: header.setForeground(null);
126: header.setFont(null);
127: }
128:
129: protected void uninstallKeyboardActions()
130: {
131: }
132:
133: protected void uninstallListeners()
134: {
135: header.removeMouseListener(mouseInputListener);
136: }
137:
138: public void uninstallUI(JComponent c)
139: {
140: uninstallListeners();
141: uninstallKeyboardActions();
142: uninstallDefaults();
143: }
144:
145: public void paint(Graphics gfx, JComponent c)
146: {
147: TableColumnModel cmod = header.getColumnModel();
148: int ncols = cmod.getColumnCount();
149: if (ncols == 0)
150: return;
151:
152: Rectangle clip = gfx.getClipBounds();
153: TableCellRenderer defaultRend = header.getDefaultRenderer();
154:
155: for (int i = 0; i < ncols; ++i)
156: {
157: Rectangle bounds = header.getHeaderRect(i);
158: if (bounds.intersects(clip))
159: {
160: TableColumn col = cmod.getColumn(i);
161: TableCellRenderer rend = col.getHeaderRenderer();
162: if (rend == null)
163: rend = defaultRend;
164: Object val = col.getHeaderValue();
165: Component comp = rend.getTableCellRendererComponent(header.getTable(),
166: val,
167: false,
168: false,
169: -1, i);
170: comp.setFont(header.getFont());
171: comp.setBackground(header.getBackground());
172: comp.setForeground(header.getForeground());
173: if (comp instanceof JComponent)
174: ((JComponent)comp).setBorder(cellBorder);
175: gfx.translate(bounds.x, bounds.y);
176: comp.setSize(bounds.width, bounds.height);
177: comp.setLocation(0,0);
178: comp.paint(gfx);
179: gfx.translate(-bounds.x, -bounds.y);
180: }
181: }
182:
183: }
184:
185: public Dimension getPreferredSize(JComponent c)
186: {
187: TableColumnModel cmod = header.getColumnModel();
188: TableCellRenderer defaultRend = header.getDefaultRenderer();
189: int ncols = cmod.getColumnCount();
190: Dimension ret = new Dimension(0,0);
191: int spacing = 0;
192:
193: if (header.getTable() != null
194: && header.getTable().getIntercellSpacing() != null)
195: spacing = header.getTable().getIntercellSpacing().width;
196:
197: for (int i = 0; i < ncols; ++i)
198: {
199: TableColumn col = cmod.getColumn(i);
200: TableCellRenderer rend = col.getHeaderRenderer();
201: if (rend == null)
202: rend = defaultRend;
203: Object val = col.getHeaderValue();
204: Component comp = rend.getTableCellRendererComponent(header.getTable(),
205: val,
206: false,
207: false,
208: -1, i);
209: comp.setFont(header.getFont());
210: comp.setBackground(header.getBackground());
211: comp.setForeground(header.getForeground());
212: if (comp instanceof JComponent)
213: ((JComponent)comp).setBorder(cellBorder);
214:
215: Dimension d = comp.getPreferredSize();
216: ret.width += spacing;
217: ret.height = Math.max(d.height, ret.height);
218: }
219: ret.width = cmod.getTotalColumnWidth();
220: return ret;
221: }
222:
223:
224: }