Bonjour,
Je suis actuellement en train de programmer une application permettant de rentrer dans postgreSQL diverses informations sur une famille d’accueil à l’aide d’un formulaire mais je me retrouve confrontée à un problème lorsque j’essaye d’ajouter les informations relatives aux contacts.
Voici actuellement ce que peut remplir l’utilisateur :
Nom : Question Constructeur01.png
Affichages : 344
Taille : 52,2 Ko
L’utilisateur peut rentrer 1 ou 2 contact et pour chaque contact il a la possibilité de renseigner plusieurs numéro de portable / fixe / etc.
Je ne pense pas que ce soit important pour ce problème alors je vais passer la manière dont je récupère toutes les informations.
Mon problème se pose lors de la création d’un ContactInfo. Voici la classe :
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
public class ContactInfo {
    private int id_family;
    private String contact_name;
    private ArrayList<String> mobile;
    private ArrayList<String> landline;
    private ArrayList<String> email;
    private ArrayList<String> other_contact;
 
 
    public ContactInfo(int new_id_family, String new_contact_name, ArrayList<String> new_mobile,
            ArrayList<String> new_landline, ArrayList<String> new_email, ArrayList<String> new_other_contact)
    {
        this.id_family = new_id_family;
        this.mobile = new_mobile;
        this.landline = new_landline;
        this.email = new_email;
        this.other_contact = new_other_contact;
        this.contact_name = new_contact_name;
    }
 
//Getter&Setter
}
Je stocke donc les différents numéro/email, dans des ArrayList<String>.
Lorsque je change d’onglet, j’appelle la méthode addContact qui va me créer 1 ou 2 ContactInfo que je stocke dans ArrayList<ContactInfo> new_contact_array. Voici la méthode :
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
35
36
37
38
39
40
41
42
43
44
45
46
47
 
private void addContact(Add_Family main_panel) throws SQLException
{
    new_contact_array.clear();
 
    //Pour chaque formulaire
    for(int i=0; i<full_form_hmap_size; i++)
    {
        full_form = full_form_hmap.get(i);
 
        // Pour chaque portable, on récupère le numéro
        mobile_array.clear();
        for(int j=0; j<full_form.getMobile_hmap_size(); j++)
        {
            //Ajoute seulement si il n’y a pas un numéro identique déjà présent dans l’array
            if(!mobile_array.contains(full_form.getMobile_tf_hmap().get(j).getText().replaceAll("\\s","")))
            {
                mobile_array.add(full_form.getMobile_tf_hmap().get(j).getText().replaceAll("\\s",""));
            } else {
                    JOptionPane.showMessageDialog(null,
                    "Vous avez inscrit le même numéro plusieurs fois, il ne sera ajouté qu’une fois."
                            + "\nSi vous vouliez ajouter un autre numéro, vérifiez les informations entrées.",
                    "Invalid Input",
                    JOptionPane.WARNING_MESSAGE);
            }
        }
 
        //Pour chaque fixe, on récupère le numéro
        //Pour chaque email, on récupère l’adresse
        //Pour chaque autre contact, on récupère le nom
 
        //On crée un nouveau ContactInfo avec les informations récupérer
        new_contact = new ContactInfo(
            main_panel.getFamily_id(),
            full_form.getContact_name_tf().getText(),
            mobile_array,
            landline_array,
            email_array,
            other_contact_array
        );
 
        new_contact_array.add(new_contact);
    }
 
    //On ajoute l’array au panel principal
    main_panel.setNew_contact(new_contact_array);
}
Je ne montre que la partie pour récupérer les portables car il s’agit du même code pour les autres champs.
Dans l’exemple, lors de ma première boucle, j’ai donc :

id_family = 1
contact_name = « A Name »
mobile = « 11111111111 », « 22222222222 »
landline = « 33333333333 »
email = « randomemail@test.com »
other_contact = « »

Seulement, quand je rentre dans la boucle pour ajouter le deuxième contact, lorsque je modifie mobile_array, cela me modifie new_contact et new_contact_array. À la fin de la méthode, je me retrouve donc avec deux ContactInfo dans new_contact_array :

ContactInfo 1 :
id_family = 1
contact_name = « A Name »
mobile = « 55555555555 »
landline = « 66666666666 »
email = « »
other_contact = « »

ContactInfo 2 :
id_family = 1
contact_name = « Another One »
mobile = « 55555555555 »
landline = « 66666666666 »
email = « »
other_contact = « »

id_family et contact_name sont donc intactes mais toutes les autres valeurs sont modifiées.
Je pense qu’il doit y avoir un problème de pointeur / référencement, mais je ne m’y connais pas très bien. J’ai fait quelques recherches mais ne comprenant pas vraiment mon problème, j’ai du mal à orienter mes recherches. Pourriez-vous m’aider à résoudre ce problème ou au moins m’indiquer mon erreur pour que je puisse mieux orienter mes recherches ?

Je suis désolée si je suis passée à côté d’une question identique sur le forum. Merci d’avoir lu jusqu’au bout.