For your example, one approach would be to define a javax.swing.table.TableModel
that returns the row index for the first column, and fields from row records for the other columns. Then, moving part of the row in the table just means moving a full row in the underlying data model.
class MyTableModel extends AbstractTableModel {
//...
public Object getValueAt(int row, int col) {
Object value;
switch( col ) {
case 0: value = (1+col);
// other cases are fields from rows.
}
}
Other options include: