2009-10-04 2 views

ответ

9

Используйте moveRow(...) метод DefaultTableModel.

Или, если вы не используете DefaultTableModel, тогда примените simliar-метод в своей пользовательской модели.

+0

спасибо. можете ли вы предоставить фрагмент кода, PLZ? – Attilah

+0

Я не заметил, что есть ссылка. это было полезно. Благодарю. – Attilah

+0

эта ссылка устарела –

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); 
} 
Смежные вопросы