1 pièce(s) jointe(s)
Objet qui change lorsqu’un array passé dans le constructeur est modifié
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 :
Pièce jointe 348928
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:
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:
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 ny a pas un numéro identique déjà présent dans larray
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é quune 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 ladresse
//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 larray 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.