Effacer affichage JTable avec modèle dynamique

Résolu
yannOpenGL Messages postés 141 Date d'inscription samedi 4 février 2012 Statut Membre Dernière intervention 3 avril 2013 - 30 mai 2012 à 14:39
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 - 31 mai 2012 à 09:17
Bonjour,

j'ai créé une JTable avec un modèle dynamique.
Je remplis cette JTable avec les données de ma base de données.

J'ai une JComboBox que je veux utiliser pour filtrer les données.
J'affiche donc les valeur d'un champ de ma base de données dans la JComboBox et j'effectue une requête SQL pour filtrer et j'affiche le résultat dans ma JTable.

Ceci marche très bien sauf que j'aimerai que les données précédemment affichées dans la JTable ne soient plus affichées.

Savez-vous comment faire ?

Merci.
Bonne journée.

9 réponses

cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
30 mai 2012 à 16:24
Maintenant, si tu as une sorte d'identifiant pour tes heu... Ami, tu peux aussi faire qqch comme ça:

public void updateTable(List pAmisToDisplay)
{
    //remove unessecary objects
    for (int i=0; i<getRowCount(); i++) {
        //TODO si datas.get(i) n'est pas dans pAmisToDisplay
        datas.remove(i);
        //reduire i, il va etre augmenter en fin de boucle
        i--;
    }

    //add additionnal objects
    for (int i=0; i<pAmisToDisplay.size(); i++) {
        //TODO si pAmisToDisplay.get(i) n'est pas dans datas
        datas.add(i, pAmisToDisplay);
    }

    fireTableDataChanged();
}
3
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
30 mai 2012 à 15:59
Salut,

cela doit être fait dans ton TableModel... Et la, ça dépends de ton implémentation de ce dernier...
0
yannOpenGL Messages postés 141 Date d'inscription samedi 4 février 2012 Statut Membre Dernière intervention 3 avril 2013
30 mai 2012 à 16:08
Merci pour ta réponse.

La seule fonction que j'ai qui peut supprimer quelque chose c'est
 public void removeAmi(int rowIndex) {
    	datas.remove(rowIndex);

        fireTableRowsDeleted(rowIndex, rowIndex);
    }

mais je n'arrive pas à l'utiliser.

Est-ce qu'il faut que je crée une autre méthode dans ma classe TableModel ?
Si oui, comment ?
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
30 mai 2012 à 16:17
Comme ça, je te dirais de faire une méthode
public void removeAllAmis() {
    //Je suis parti du principe que datas était une List...
    datas.clear();
    fireTableDataChanged();
}


concernant le problème d'utilisation, peut-être un soucis de cast...

((MyModel)table.getModel()).removeAllAmis();
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yannOpenGL Messages postés 141 Date d'inscription samedi 4 février 2012 Statut Membre Dernière intervention 3 avril 2013
30 mai 2012 à 18:13
Au lieu de dire Ami, on va dire Data.

Il y a un problème de type dans ce que tu as fais.
A la ligne :
 datas.add(i, pDataToDisplay);


Apparemment List<Data> devrait être du type Data.
Et si je le déclare comme type de donnée, il n'y a plus d'erreur.
Par contre, lorsque j'utilise la fonction :
modeleDynamique.updateTable(donneeFiltreeJComb);

ça me marque :
java.util.Vector cannot be cast to Data

sachant que donneeFiltreeJComb est de ce type :
[[val1, val2, val3, val4], [val11, val12, val13, val14]
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
30 mai 2012 à 18:32
tu as un vecteur de vecteur, autrement dit : Vector<Vector>
tu dois donc changer la signature de la methode update:

public void updateTable(Vector<Vector> pDatas)
{ ... }
0
yannOpenGL Messages postés 141 Date d'inscription samedi 4 février 2012 Statut Membre Dernière intervention 3 avril 2013
31 mai 2012 à 08:50
Ca ne marche toujours pas.
La méthode datas.add(int, Data) n'accepte pas Vector<Vector> comme paramètre.

Du coup je mets mon code de la classe modeleDynamique :
public class ModeleDynamiqueBDD extends AbstractTableModel {

    private final List<DataBDD> datas = new ArrayList<DataBDD>();
    private final String[] entetes = {"Nom", "Ville", "Code_Postal"};
    
    public ModeleDynamiqueBDD(){
    	super();    	
    }
    
    public int getRowCount() {
        return datas.size();
    }

    public int getColumnCount() {
        return entetes.length;
    }

    public String getColumnName(int columnIndex) {
        return entetes[columnIndex];
    }


private String NOM;
private String VILLE;
private String CODE_POSTALE;
private String TYPE_EXPLOITATION;

    
    public Object getValueAt(int rowIndex, int columnIndex) {
        switch(columnIndex){
            case 0:
                return datas.get(rowIndex).getNOM();
            case 1:
                return datas.get(rowIndex).getVILLE();
            case 2:
                return datas.get(rowIndex).getCODE_POSTALE();
            case 3:
                return datas.get(rowIndex).getTYPE_EXPLOITATION();
            default:
                return null; //Ne devrait jamais arriver
        }
    }

    public void addData(DataBDD dataBDD) {
    	datas.add(dataBDD);

        fireTableRowsInserted(datas.size() -1, datas.size() -1);
    }

    public void removeData(int rowIndex) {
    	datas.remove(rowIndex);

        fireTableRowsDeleted(rowIndex, rowIndex);
    }
//////////////////////////////////////////////////////////////////////////////////////////////    

    public void updateTable(Vector<Vector> pDataToDisplay)
    {
        //remove unessecary objects
        for (int i=0; i<getRowCount(); i++) {
            //TODO si datas.get(i) n'est pas dans pDataToDisplay
            datas.remove(i);
            //reduire i, il va etre augmenter en fin de boucle
            i--;
        }

        //add additionnal objects
        for (int i=0; i<pDataToDisplay.size(); i++) {
            //TODO si pDataToDisplay.get(i) n'est pas dans datas
            datas.add(i, pDataToDisplay);
        }

        fireTableDataChanged();
    }

}
0
yannOpenGL Messages postés 141 Date d'inscription samedi 4 février 2012 Statut Membre Dernière intervention 3 avril 2013
31 mai 2012 à 09:01
Finalement, j'ai enlevé la deuxième partie de ta fonction et n'ai pas mis de paramètre dans la signature.
Ça marche exactement comme je voulais.

Voici le code :
public void updateTable()
    {
        //remove unessecary objects
        for (int i=0; i<getRowCount(); i++) {
            //TODO si datas.get(i) n'est pas dans pDataToDisplay
            datas.remove(i);
            //reduire i, il va etre augmenter en fin de boucle
            i--;
        }

    }
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
31 mai 2012 à 09:17
si jamais, le probleme venait surement du fait que ta list est typée DataBDD..
tu aurais donc du avoir une vector de DataBDD, Vector<DataBDD>...
0
Rejoignez-nous