Перемещение строки в jTable - PullRequest
       19

Перемещение строки в jTable

8 голосов
/ 05 октября 2009

Как можно переместить строку в jTable, чтобы row1 переместился на позицию row2 , а row2 перешел на row1 Позиция?

Ответы [ 3 ]

9 голосов
/ 05 октября 2009

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

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

2 голосов
/ 11 июля 2013

Вот мой код, который я только что разработал, используя ответ на этот вопрос. С помощью этой функции вы можете выбрать несколько строк за раз и переместить их вниз или вверх на 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);
}
0 голосов
/ 05 октября 2009
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);
}
...