2010-12-14 3 views

Répondre

2

Vous pouvez définir un nouveau modèle de données vide:

TableModel newModel = new DefaultTableModel(); 
jtable.setModel(newModel); 
+0

vous voulez dire avec un modèle vide, je peux supprimer tous les enregistrements de ma table GUI? – user472221

2

Vous devez comprendre qu'une JTable est une vue des données, alors que les données réelles réside dans le TableModel. Si vous devez effacer la table, vous devez effacer le TableModel.

Si votre TableModel est un AbstractTableModel, vous devez fournir des implémentations de 3 méthodes:

public int getRowCount(); 
public int getColumnCount(); 
public Object getValueAt(int row, int column); 

Fréquemment, les objets de données réels sont stockés dans une structure de données supplémentaires (par exemple une liste), puis les requêtes AbstractTableModel que liste.

List<DomainObject> objects = new ArrayList<DomainObject>(); 

public int getRowCount() { return objects.size(); } 
// How many columns you make depends on what features of the objects you're exposing. 
public int getColumnCount() { return NUMBER_OF_COLUMNS; } 
public Object getValueAt(int row, int column) { 
    DomainObject object = objects.get(row); 
    ... // pull out the property based on the column they pass in 
} 

// By exposing this method, you can allow your Controller code to reach into this model 
// and delete all the rows. 
public void clear() { 
    objects.clear() 
} 

Qu'est-ce que HH suggère que vous faire est de changer le modèle de votre JTable pour faire référence à un modèle vide, qui sera en effet clair sur la table. Cependant, les colonnes etc. ne seront pas persistées correctement (le nouveau DefaultTableModel n'a aucune idée de ce que seront ces noms de colonnes). Après avoir étudié comment la vue et le modèle s'emboîtent le plus, regardez GlazedLists. Il permet un moyen très puissant de créer des TableModels qui fournissent des vues dynamiques de vos données, par ex. en filtrant les lignes qui ne correspondent pas à certains critères. En résumé, vous ne trouverez pas de méthode sur JTable pour effacer son contenu, car c'est le travail de TableModel. Vous devez vous assurer que les structures de données de support de TableModel sont supprimées.

2

Si vous utilisez le DefaultTableModel alors vous pouvez simplement utiliser:

model.setRowCount(0); 

Cela vaut mieux que de créer une nouvelle DefaultTableModel. La création d'un nouveau TableModel entraîne la recréation du TableColumnModel, ce qui signifie que toutes les TableColumns seront redimensionnées aux valeurs par défaut et recréées dans l'ordre dans lequel les colonnes existent dans le modèle. L'utilisateur peut avoir changé ces propriétés et ne devrait pas être forcé de le faire à nouveau.

Si vous supprimez simplement certaines lignes contenant une valeur particulière, vous pouvez utiliser la méthode DefaultTableModel.removeRow (...). Assurez-vous de commencer par la suppression de la ligne à partir de la fin du modèle et comptez à 0.

0

appel removeAll de j_table méthode à addActionListener

button1.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent arg0) { 
     j_table.removeAll(); 
     data_model_table.setRowCount(0); 
    } 
}); 
Questions connexes