28 |
28 |
package org.gvsig.fmap.mapcontrol.dal.feature.swing;
|
29 |
29 |
|
30 |
30 |
import java.awt.BorderLayout;
|
|
31 |
import static java.awt.BorderLayout.CENTER;
|
|
32 |
import java.awt.Component;
|
|
33 |
import javax.swing.AbstractListModel;
|
|
34 |
import javax.swing.JButton;
|
31 |
35 |
|
32 |
36 |
import javax.swing.JLabel;
|
|
37 |
import javax.swing.JList;
|
33 |
38 |
import javax.swing.JPanel;
|
34 |
39 |
import javax.swing.JScrollPane;
|
|
40 |
import javax.swing.JTable;
|
|
41 |
import javax.swing.ListCellRenderer;
|
|
42 |
import javax.swing.ListModel;
|
|
43 |
import javax.swing.UIManager;
|
|
44 |
import javax.swing.table.JTableHeader;
|
35 |
45 |
|
36 |
46 |
import org.gvsig.fmap.dal.DataStoreNotification;
|
37 |
47 |
import org.gvsig.fmap.dal.exception.DataException;
|
... | ... | |
226 |
236 |
*/
|
227 |
237 |
private JScrollPane getJScrollPane() throws DataException {
|
228 |
238 |
if (jScrollPane == null) {
|
|
239 |
FeatureTable theTable = getTable();
|
229 |
240 |
jScrollPane = new JScrollPane();
|
230 |
|
jScrollPane.setViewportView(getTable());
|
|
241 |
jScrollPane.setViewportView(theTable);
|
|
242 |
jScrollPane.setRowHeaderView(getRowHeader(theTable));
|
231 |
243 |
}
|
232 |
244 |
return jScrollPane;
|
233 |
245 |
}
|
234 |
246 |
|
|
247 |
private static class RowHeaderRenderer extends JButton implements ListCellRenderer {
|
|
248 |
|
|
249 |
RowHeaderRenderer(JTable table) {
|
|
250 |
JTableHeader header = table.getTableHeader();
|
|
251 |
setOpaque(true);
|
|
252 |
setBorder(UIManager.getBorder("TableHeader.cellBorder"));
|
|
253 |
setHorizontalAlignment(CENTER);
|
|
254 |
setForeground(header.getForeground());
|
|
255 |
setBackground(header.getBackground());
|
|
256 |
setFont(header.getFont());
|
|
257 |
}
|
|
258 |
|
|
259 |
public Component getListCellRendererComponent(JList list, Object value,
|
|
260 |
int index, boolean isSelected, boolean cellHasFocus) {
|
|
261 |
setText((value == null) ? "" : value.toString());
|
|
262 |
return this;
|
|
263 |
}
|
|
264 |
}
|
|
265 |
|
|
266 |
private JList getRowHeader(final FeatureTable theTable) {
|
|
267 |
|
|
268 |
ListModel lm = new AbstractListModel() {
|
|
269 |
public int getSize() {
|
|
270 |
return theTable.getRowCount();
|
|
271 |
}
|
|
272 |
|
|
273 |
public Object getElementAt(int index) {
|
|
274 |
return String.valueOf(index+1);
|
|
275 |
}
|
|
276 |
};
|
|
277 |
JList rowHeader = new JList(lm);
|
|
278 |
rowHeader.setCellRenderer(new RowHeaderRenderer(theTable));
|
|
279 |
rowHeader.setFixedCellWidth(50);
|
|
280 |
rowHeader.setFixedCellHeight(table.getRowHeight()); //+ table.getRowMargin());
|
|
281 |
return rowHeader;
|
|
282 |
}
|
|
283 |
|
235 |
284 |
public void update(Observable observable, Object notification) {
|
236 |
285 |
// If selection changes from nothing selected to anything selected
|
237 |
286 |
// or the reverse, update selection info
|