8
votes

Déplacer une ligne en jtalle

Comment peut-on déplacer une ligne dans JTAble de sorte que rangée1 va à Row22 S position et rangée2 va à Row1 S Position?


0 commentaires

3 Réponses :


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

0 commentaires

9
votes

Utilisez le MOVEROW (...) méthode du ParfaultTableModel .

ou, si vous n'utilisez pas la valeur par défautTableModel, impliquez une méthode Simliar dans votre modèle personnalisé.


2 commentaires

Je n'ai pas remarqué qu'il y avait un lien. ça a été utile. Merci.


Le lien exemple a été supprimé. Vous aurez maintenant besoin de lire l'API pour la syntaxe appropriée.



5
votes

Voici mon code que je viens de développer en utilisant la réponse dans cette question. Avec cette fonction, vous pouvez sélectionner plusieurs lignes à la fois et les déplacer dans un jtalle code>. J'ai joint ces fonctions à jbutton code>, mais je les nettoie pour les rendre plus lisibles.

La dernière ligne de code de la méthode ( setrowselectionInterval () code>) est Utilisé pour suivre la sélection sur la ligne déplacée, car moverow () code> ne déplace pas la sélection mais le contenu de la ligne. p>

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 commentaires