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.
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.
tu pourrais mettre le code qui fait l'affichage de ton ArrayList??
ce que j'ajoute à ma liste est un objet d'une classe qui se constitue de deux attribues:
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()); }
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.
peut être le problème est lors de l'ajout, tu pourrais montrer le code de remplissage de ton arraylist
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 ^^
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
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()); } } }
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
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);
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));
j'ai trouvé la solution, je devais modifier directement dans dessin sans passer par panel et textArea:
merci pour l'aide!
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()); } } }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager