Java: Swing: JTable and TableModel:
"All" there is to do is to call JScrollPane.setRowHeaderView().
(Install JScrollPane bug fix for proper synchronization of row/column header and main component.)
You may use either a separate JTable or a JList as a row header.
JList has the disadvantage that it uses a different model and a different strategy for row height. Both make proper synchronization harder.
I think in almost all cases a JTable is the better choice.
(C) 2001-2009 Christian Kaufhold (swing@chka.de)