IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Problème avec DefaultListModel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Par défaut Problème avec DefaultListModel
    Bonjour,

    J'ai un problème d'utilisation avec une classe que j'ai crée héritant de la classe DefaultListModel, cela concerne la fonction remove(int index) (ainsi que la fonction removeElementAt(int index))

    En fait, je veux supprimer de la liste l'item selectionné, pour cela j'ai un bouton supprimé qui fait deux choses :
    - recupère l'objet selectionné. (et supprime ses correspondances dans la base)
    - supprime l'objet de la liste via son index.

    donc la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int index = getListeVehicule().getSelectedIndex();
    me renvoie le bon index et je peux accéder au infos de l'objet...

    par contre quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getModeleVehicule().remove(index)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getModeleVehicule().removeElementAt(index)
    Cela me supprime automatiquement le dernier item de la liste.

    Mes fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private ModeleVehicule getModeleVehicule() {
    		if (modeleVehicule == null) {
    			modeleVehicule = new ModeleVehicule(vectorVehicule);
    		}
    		return modeleVehicule;
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private JList getListeVehicule() {
    		if (listeVehicule == null) {
    			listeVehicule = new JList();
    			listeVehicule.setPreferredSize(new Dimension(200, 200));
    			listeVehicule.setModel(getModeleVehicule());
    		}
    		return listeVehicule;
    	}
    ma classe ModelVehicule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    public class ModeleVehicule extends DefaultListModel {
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	private Vector<Vehicule> listeDonnees;
     
    	public ModeleVehicule(Vector<Vehicule> list) {
    		listeDonnees = list;
    		setVector();
    	}
     
    	private void setVector() {
    		removeAllElements();
    		for (Iterator<Vehicule> iter = listeDonnees.iterator(); iter.hasNext();) {
    			Vehicule iteration = iter.next();
    			addElement(iteration.getDesignation() + "  " + iteration.getImmatriculation());
    		}
    	}
     
    	public Object getElementAt(int index) {
    		Vehicule iteration = listeDonnees.get(index);
    		return iteration.getDesignation() + "  " + iteration.getImmatriculation();
    	}
     
    	/**
             * Permet de récupérer l'instance du vehicule à l'index de la comboBox/liste précisée.
             * @param index = numéro d'index du véhicule recherché dans la comboBox/liste
             * @return véhicule correspondant
             */
    	public Vehicule get(int index) {
    		return listeDonnees.get(index);
    	}
    }
    Savez vous pourquoi j'obtiens cette réaction ?

    Merci pour votre aide !

  2. #2
    Membre éprouvé Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Par défaut
    Le seul truc que je pourrai voir c'est que tu ne surcharges ni getModeleVehicule().remove(index) ni getModeleVehicule().removeElementAt(index)

    En gros tu ne surcharges que la moitié des méthodes.

    Exemple le addElement doit ajouter dans la liste du DefaultListModel pas dans ta liste de données

    Bref essaye en surchargeant par exemple removeElementAt sis c'est celle là que tu utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void removeElementAt(int index){
    listeDonnees.removeElementAt(index);
    }
    Sauf que je sens le IndexOfBoundException car comme dit plus haut quand tu fais addElement tu ajoutes dans le modèle de DefaultListModel pas dans ton modèle

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Par défaut
    Bonjour, merci pour ta réponse mais si j'utilise la méthode addElement() non surchargée, ne faudrait-il pas que j'utilise la méthode removeElementAt() non surchargé aussi ?

    Je vais essayer pour voir.

    EDIT : ca n'a rien changé

    Toujours le dernier de la liste qui s'enlève de la liste alors que je supprime bien les infos du véhicule selectionné dans la base...

  4. #4
    Membre éprouvé Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Par défaut
    J'ai l'impression que tu t'es refais un modèle juste pour avoir un affichage personnalisé à ce moment là ne surchage que la méthode get(int)

    Tu utilises ton modèle pour alimenter quoi ?

    As-tu essayé de débuger ?


    Au fait attention car getElementAt et removeElementAt sont deprecated

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Par défaut
    Et bien je voudrais avoir juste le nom du véhicule affiché dans la liste, mais je voudrais tout de même pouvoir récuperer l'objet avec tous les détails du véhicule.

    Ce n'est pas une bonne méthode ?

    J'utilise une classe similaire pour d'autre objets qui marche bien pourtant.

  6. #6
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Je pense que c'est à cause de ta déclaration private Vector<Vehicule> listeDonnees;, qui conduit à avoir deux vecteurs pour gérer la liste : l'un qui se trouve - et qui n'est pas visible - dans la classe DefaultListModel, avec lequel travaille la méthode remove, et le tien, avec lequel tu travailles.

    Il y a donc deux valeurs différentes pour faire la même chose.

    Pour résoudre ce problème, soit, comme te le disent les autres, tu re-écris toutes les méthodes, soit tu supprimes la déclaration incriminée, et tu travailles uniquement par appel aux méthodes disponibles dans DefaultListModel.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Par défaut
    Je ne peux pas gérer un Vector qui servira à la liste (ici un vecteur de String donc) et n
    un Vector de Vehicule pour pouvoir récupérer l'objet véhicule entier (qui correspondra à la description affiché dans la liste) ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JList] Problème avec DefaultListModel
    Par tigger_riric dans le forum Composants
    Réponses: 3
    Dernier message: 14/07/2008, 15h54
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo