How can one move a row in jTable
so that row1 goes to row2's position and row2 goes to row1's position ?
Asked
Active
Viewed 1.4k times
3 Answers
9
Use the moveRow(...)
method of the DefaultTableModel
.
Or, if you aren't using the DefaultTableModel then implement a simliar method in your custom model.

camickr
- 321,443
- 19
- 166
- 288
-
I didn't notice that there was a link. it's been helpful. thanks. – Attilah Oct 05 '09 at 15:14
-
The example link has been removed. You will now need to read the API for the proper syntax. – camickr Jul 12 '13 at 15:20
6
Here is my code that I've just developed using the answer in this question.
With those function you can select multiple rows at a time and move them down or up in a JTable
. I've attached those function to JButton
, but i clean them out to make them more readable.
The last code line of both method (setRowSelectionInterval()
) is used to follow the selection on the row being moved, since moveRow()
doesn't move the selection but the content of the row.
public void moveUpwards()
{
moveRowBy(-1);
}
public void moveDownwards()
{
moveRowBy(1);
}
private void moveRowBy(int by)
{
DefaultTableModel model = (DefaultTableModel) table.getModel();
int[] rows = table.getSelectedRows();
int destination = rows[0] + by;
int rowCount = model.getRowCount();
if (destination < 0 || destination >= rowCount)
{
return;
}
model.moveRow(rows[0], rows[rows.length - 1], destination);
table.setRowSelectionInterval(rows[0] + by, rows[rows.length - 1] + by);
}

BullyWiiPlaza
- 17,329
- 10
- 113
- 185

LAL
- 480
- 5
- 13
-
Have a JTextAreaEditor in one jTable cell. It moves the row, but without the text in the JTextAreaEditor. Any idea to solve this? – orgen Feb 21 '23 at 06:53
-
Solved it with zed's solution: https://stackoverflow.com/a/1517416/8311151 – orgen Feb 22 '23 at 08:56
1
TableModel model = jTable.getModel();
for(int col=0; col<model.getColumnCount(); col++) {
Object o1 = model.getValueAt(row1, col);
Object o2 = model.getValueAt(row2, col);
model.setValueAt(o1, row2, col);
model.setValueAt(o2, row1, col);
}

Zed
- 57,028
- 9
- 76
- 100