Revision 41611 trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/FeatureTablePanel.java

View differences:

FeatureTablePanel.java
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

Also available in: Unified diff