How can one move a row in jTable
so that row1 goes to row2's position and row2 goes to row1's position ?
Use the moveRow(...)
method of the DefaultTableModel
.
Or, if you aren't using the DefaultTableModel then implement a simliar method in your custom model.
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);
}
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);
}
来源:https://stackoverflow.com/questions/1517396/moving-a-row-in-jtable