Java tutorial
import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JTable; import javax.swing.LookAndFeel; import javax.swing.table.AbstractTableModel; public class RowNumberHeader extends JTable { protected JTable mainTable; public RowNumberHeader(JTable table) { super(); mainTable = table; setModel(new RowNumberTableModel()); setPreferredScrollableViewportSize(getMinimumSize()); setRowSelectionAllowed(false); JComponent renderer = (JComponent) getDefaultRenderer(Object.class); LookAndFeel.installColorsAndFont(renderer, "TableHeader.background", "TableHeader.foreground", "TableHeader.font"); LookAndFeel.installBorder(this, "TableHeader.cellBorder"); } public int getRowHeight(int row) { return mainTable.getRowHeight(); } class RowNumberTableModel extends AbstractTableModel { public int getRowCount() { return mainTable.getModel().getRowCount(); } public int getColumnCount() { return 1; } public Object getValueAt(int row, int column) { return new Integer(row + 1); } } public static void main(String[] a) { JFrame f = new JFrame(); f.add(new RowNumberHeader(new JTable(3, 4))); f.setSize(300, 300); f.setVisible(true); } }