2009-10-04 53 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); 
}