2009-10-04 15 views

Répondre

9

utiliser la méthode moveRow(...) du DefaultTableModel. Ou, si vous n'utilisez pas DefaultTableModel, implémentez une méthode simliar dans votre modèle personnalisé.

+0

merci. pouvez-vous fournir un extrait de code, plz? – Attilah

+0

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

+0

ce lien est périmé –

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

Voici mon code que je viens de développer en utilisant la réponse à cette question. Avec ces fonctions, vous pouvez sélectionner plusieurs lignes à la fois et les déplacer vers le bas ou vers le haut dans un JTable. J'ai attaché ces fonctions à JButton, mais je les nettoie pour les rendre plus lisibles.

La dernière ligne de code à la fois de la méthode (setRowSelectionInterval()) est utilisé pour suivre la sélection de la rangée étant déplacée, depuis moveRow() ne se déplace pas le choix mais le contenu de la rangée.

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