2009-10-04 60 views
8

移动一行如何在一个移动jTable一排,这样ROW12行的位置和2行ROW1的位置?JTable中

回答

9

使用DefaultTableModelmoveRow(...)方法。或者,如果您不使用DefaultTableModel,那么在您的自定义模型中实现一个simliar方法。

+0

谢谢。你能提供一个代码片段吗? – Attilah 2009-10-04 21:36:52

+0

我没有注意到有链接。这很有帮助。谢谢。 – Attilah 2009-10-05 15:14:45

+0

此链接已过期 – 2013-07-11 15:46:33

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