如何在jTable
中移动一行,以便 row1 转到 row2 的位置, row2 转到< strong> row1 的位置?
答案 0 :(得分:9)
使用moveRow(...)
的{{1}}方法。
或者,如果您没有使用DefaultTableModel,那么在自定义模型中实现一个simliar方法。
答案 1 :(得分:2)
这是我刚刚使用此问题中的答案开发的代码。
使用这些功能,您可以一次选择多行,然后在JTable
中向下或向上移动它们。我已将这些功能附加到JButton
,但我清理它们以使它们更具可读性。
两个方法的最后一个代码行(setRowSelectionInterval()
)用于跟踪正在移动的行的选择,因为moveRow()
不会移动选择而是移动行的内容。
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);
}
答案 2 :(得分:0)
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);
}