2009-10-04 17 views

Odpowiedz

9

pomocą sposobu DefaultTableModelmoveRow(...).

Lub, jeśli nie używasz DefaultTableModel, a następnie zaimplementuj prostą metodę w swoim modelu niestandardowym.

+0

dzięki. można podać fragment kodu, plz? – Attilah

+0

nie zauważyłem, że istniał związek. to było pomocne. dzięki. – Attilah

+0

ten link jest nieaktualny –

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

Oto mój kod, który właśnie opracowałem, korzystając z odpowiedzi na to pytanie. Dzięki tej funkcji możesz wybrać wiele wierszy naraz i przesunąć je w dół lub w górę o numer JTable. Załączam tę funkcję do JButton, ale wyczyszczę je, aby były bardziej czytelne.

Ostatnia linia kodu obu metod (setRowSelectionInterval()) służy do śledzenia zaznaczenia w przenoszonym wierszu, ponieważ moveRow() nie przesuwa zaznaczenia, ale zawartość wiersza.

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