在jTable中移动一行

时间:2009-10-04 21:15:01

标签: java swing jtable tablemodel

如何在jTable中移动一行,以便 row1 转到 row2 的位置, row2 转到< strong> row1 的位置?

3 个答案:

答案 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);
}