Effacer affichage JTable avec modèle dynamique [Résolu]

yannOpenGL 141 Messages postés samedi 4 février 2012Date d'inscription 3 avril 2013 Dernière intervention - 30 mai 2012 à 14:39 - Dernière réponse : cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention
- 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.
Afficher la suite 

9 réponses

Répondre au sujet
cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention - 30 mai 2012 à 16:24
+3
Utile
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();
}
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cormandyr
cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention - 30 mai 2012 à 15:59
0
Utile
Salut,

cela doit être fait dans ton TableModel... Et la, ça dépends de ton implémentation de ce dernier...
Commenter la réponse de cormandyr
yannOpenGL 141 Messages postés samedi 4 février 2012Date d'inscription 3 avril 2013 Dernière intervention - 30 mai 2012 à 16:08
0
Utile
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 ?
Commenter la réponse de yannOpenGL
cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention - 30 mai 2012 à 16:17
0
Utile
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();
Commenter la réponse de cormandyr
yannOpenGL 141 Messages postés samedi 4 février 2012Date d'inscription 3 avril 2013 Dernière intervention - 30 mai 2012 à 18:13
0
Utile
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]
Commenter la réponse de yannOpenGL
cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention - 30 mai 2012 à 18:32
0
Utile
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)
{ ... }
Commenter la réponse de cormandyr
yannOpenGL 141 Messages postés samedi 4 février 2012Date d'inscription 3 avril 2013 Dernière intervention - 31 mai 2012 à 08:50
0
Utile
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();
    }

}
Commenter la réponse de yannOpenGL
yannOpenGL 141 Messages postés samedi 4 février 2012Date d'inscription 3 avril 2013 Dernière intervention - 31 mai 2012 à 09:01
0
Utile
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--;
        }

    }
Commenter la réponse de yannOpenGL
cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention - 31 mai 2012 à 09:17
0
Utile
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>...
Commenter la réponse de cormandyr

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.