web-dev-qa-db-fra.com

Comment supprimer une ligne de JTable?

Je souhaite supprimer certaines lignes d'une table JT. Comment puis-je le faire?

16
somya agrawal

Pour supprimer une ligne d'un JTable, vous devez supprimer la ligne cible du sous-jacent TableModel . Si, par exemple, votre TableModel est une instance de DefaultTableModel , vous pouvez supprimer une ligne en procédant comme suit:

((DefaultTableModel)myJTable.getModel()).removeRow(rowToRemove);
36
Brandon E Taylor

Si vous avez besoin d'une solution de travail simple, essayez d'utiliser DefaultTableModel .

Si vous avez créé votre propre modèle de table, qui étend AbstractTableModel, vous devez également implémenter la méthode removeRow (). L'implémentation exacte dépend de la structure sous-jacente que vous avez utilisée pour stocker les données.

Par exemple, si vous avez utilisé Vector, cela peut ressembler à ceci:

public class SimpleTableModel extends AbstractTableModel {
    private Vector<String> columnNames = new Vector<String>();
    // Each value in the vector is a row; String[] - row data;
    private Vector<String[]> data = new Vector<String[]>();

    ...

    public String getValueAt(int row, int col) {
        return data.get(row)[col];
    }

    ...

    public void removeRow(int row) {
        data.removeElementAt(row);
    }
}

Si vous avez utilisé List, ce serait très similaire:

// Each item in the list is a row; String[] - row data;
List<String[]> arr = new ArrayList<String[]>();

public void removeRow(int row) {
    data.remove(row);
}

HashMap:

//Integer - row number; String[] - row data;
HashMap<Integer, String[]> data = new HashMap<Integer, String[]>();

public void removeRow(Integer row) {
    data.remove(row);
}

Et si vous utilisez des tableaux comme celui-ci

String[][] data = { { "a", "b" }, { "c", "d" } };

alors vous n'avez pas de chance, car il n'y a aucun moyen de supprimer dynamiquement des éléments des tableaux. Vous pouvez essayer d'utiliser des tableaux en stockant séparément certains indicateurs signalant quelles lignes sont supprimées et lesquelles ne le sont pas, ou par une autre manière sournoise, mais je le déconseille ... Cela introduirait une complexité inutile et serait en fait juste résoudre un problème en en créant un autre . C'est une façon infaillible de finir ici . Essayez plutôt l'une des méthodes ci-dessus pour stocker vos données de table.

Pour mieux comprendre comment cela fonctionne et que faire pour que votre propre modèle fonctionne correctement, je fortement vous conseille de vous référer à Java Tutorial , DefaultTableModel API et c'est code source .

8
Kirill Strizhak

La bonne façon d'appliquer un filtre à une table JTable consiste à utiliser l'interface RowFilter ajoutée à un TableRowSorter. À l'aide de cette interface, la vue d'un modèle peut être modifiée sans changer le modèle sous-jacent. Cette stratégie préserve le paradigme Model-View-Controller, tandis que la suppression des lignes que vous souhaitez masquer du modèle lui-même rompt le paradigme en brouillant votre séparation des préoccupations.

4
codethulhu

Une JTable forme normalement la partie View d'une implémentation MVC. Vous souhaiterez supprimer des lignes de votre modèle. La JTable, qui devrait écouter ces modifications, sera mise à jour pour refléter cette suppression. Par conséquent, vous ne trouverez pas removeRow () ou similaire comme méthode sur JTable.

3
dave

mmm est des gars très simples

for( int i = model.getRowCount() - 1; i >= 0; i-- )
{
    model.removeRow(i);
}
3
cmujica

Regardez le DefaultTableModel pour un modèle simple que vous pouvez utiliser:

http://Java.Sun.com/javase/6/docs/api/javax/swing/table/DefaultTableModel.html

Cela étend le AbstractTableModel, mais devrait être suffisant à des fins de base. Vous pouvez toujours étendre AbstractTableModel et créer le vôtre. Assurez-vous de le définir également sur la JTable.

http://Java.Sun.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html

Consultez le didacticiel Sun de base pour plus d'informations sur l'utilisation de JTable avec le modèle de table:

http://Java.Sun.com/docs/books/tutorial/uiswing/components/table.html#data

3
Jon