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

Collection et Stream Java Discussion :

ArrayList: toujours le dernier élément


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut ArrayList: toujours le dernier élément
    Salut tout le monde

    J'ai un problème avec mon Arraylist, quand je veux afficher les élément contenus dans ma liste il ne y'a que le dernier élément qui s'affiche, y'a t'il quelqu'un parmi vous qui connait la source de ce problème?

    merci d'avance.

  2. #2
    Membre éclairé Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Points : 773
    Points
    773
    Par défaut
    tu pourrais mettre le code qui fait l'affichage de ton ArrayList??

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for (int i=0;i<liste.size();i++)
    {
    System.out.println(liste.get(i).getTxt().getText()+ " " + liste.get(i).getPanel().getPosX()+" " + liste.get(i).getPanel().getPosY());
    }
    ce que j'ajoute à ma liste est un objet d'une classe qui se constitue de deux attribues:
    Panneau panel; (une classe qui hérite de JPanel)
    JTextArea txt;

    ce code je l'ai écrit juste pour tester si l'ajout se déroule bien mais lors de l'exécution il ne y'a que le dernier élément ajouté qui s'affiche tant de fois que la taille de la liste.

  4. #4
    Membre éclairé Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Points : 773
    Points
    773
    Par défaut
    peut être le problème est lors de l'ajout, tu pourrais montrer le code de remplissage de ton arraylist

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut
    d'accord mais d'abord je vais essayer de décrire le problème:

    l'objectif est de dessiner une zone de texte entourée par un rectangle et donc à chaque fois que l'utilisateur clique et relache la souris un JTextField apparait et quand il appui ensuite sur entrée, le texte récupéré et le rectangle dessiné doivent être ajoutés à la liste.
    Supposons que j'appelle ma classe Dessin, donc elle se constitue de deux attribues:
    Panneau panel;
    JTextArea txt;

    après je fais une instance de la classe Dessin, supposons que c'est dessin
    donc dessin prend le texte et le rectangle et ensuite je fais: liste.add(dessin)
    sachant que liste est declarée comme ceci: ArrayList<Dessin> liste=new ArrayList<Dessin>

    j'espere que c'est bien claire ^^

  6. #6
    Membre éclairé Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Points : 773
    Points
    773
    Par défaut
    si j'ai bien compris, à chaque clic tu crée un objet Dessin et tu l'ajoutes à ton ArrayList?? un peu de code ne ferait pas de mal

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut
    A chaque appui sur entrée plutôt, à chaque clique il y'a le JTextField qui apparait pour recuperer le texte, voici le code

    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
     
    public void mouseReleased(MouseEvent event)
    {
    	jtf.setLocation(event.getX(),event.getY());
    	jtf.setVisible(true);
    }
     
    public void keyReleased(KeyEvent event) 
    {
    	if (event.getKeyCode()==KeyEvent.VK_ENTER)
    	{
    		panel.setPosX(jtf.getX());
    		panel.setPosY(jtf.getY());
    		panel.setLargeur(jtf.getWidth());
    		panel.setHauteur(jtf.getHeight());
     
    		textArea.setLocation(jtf.getX(), jtf.getY());
    		textArea.setText(jtf.getText());
     
    		dessin.setTxt(textArea);
    		dessin.setPanel(panel);
     
    		liste.add(dessin);
     
    		for (int i=0;i<liste.size();i++)
    		{
    			System.out.println(liste.get(i).getTxt().getText()+ " " + liste.get(i).getPanel().getPosX()+" " + liste.get(i).getPanel().getPosY());
    		}
            }
    }

  8. #8
    Membre éclairé Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Points : 773
    Points
    773
    Par défaut
    dans la méthode keyReleased, tu ajoutes toujours la même référence dessin à ton arraylist, et donc toute modification ultérieure de ton objet dessin se répercutera sur tous les éléments de ta liste, puisqu'ils référencent tous le même objet.
    essaie de créer un nouveau objet Dessin à chaque keyReleased

  9. #9
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut
    j'ai ajouté ces lignes, mais il y'a toujours le meme problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    dessin=new Dessin();
    dessin.setTxt(textArea);
    dessin.setPanel(panel);
     
    liste.add(dessin);

  10. #10
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut
    j'ai essayé aussi avec cette ligne mais ça n'a pas marché non plus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    liste.add(new Dessin(panel,textArea));

  11. #11
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut
    j'ai trouvé la solution, je devais modifier directement dans dessin sans passer par panel et textArea:

    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
     
    public void mouseReleased(MouseEvent event)
    {
    	jtf.setLocation(event.getX(),event.getY());
    	jtf.setVisible(true);
    }
     
    public void keyReleased(KeyEvent event) 
    {
    	if (event.getKeyCode()==KeyEvent.VK_ENTER)
    	{
                    dessin=new Dessin();		
     
                    dessin.getPanel().setPosX(jtf.getX());
    		dessin.getPanel().setPosY(jtf.getY());
    		dessin.getPanel().setLargeur(jtf.getWidth());
    		dessin.getPanel().setHauteur(jtf.getHeight());
     
    		dessin.getTxt().setLocation(jtf.getX(), jtf.getY());
    		dessin.getTxt().setText(jtf.getText());
     
    		liste.add(dessin);
     
    		for (int i=0;i<liste.size();i++)
    		{
    			System.out.println(liste.get(i).getTxt().getText()+ " " + liste.get(i).getPanel().getPosX()+" " + liste.get(i).getPanel().getPosY());
    		}
            }
    }
    merci pour l'aide!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/04/2008, 09h09
  2. Réponses: 10
    Dernier message: 09/06/2006, 17h02
  3. [PL/SQL] Curseur - Récupération du dernier élément
    Par dupont166 dans le forum Oracle
    Réponses: 5
    Dernier message: 27/12/2005, 04h57
  4. for-each et dernier élément
    Par neptune dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 08/09/2005, 14h53
  5. Comment récupérer l'index du dernier élément inséré ?
    Par Didier100 dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/07/2004, 22h41

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