Problème ArrayList .size() et .add()

Résolu
j0r6l Messages postés 17 Date d'inscription mercredi 11 avril 2012 Statut Membre Dernière intervention 4 juin 2012 - 14 mai 2012 à 09:14
j0r6l Messages postés 17 Date d'inscription mercredi 11 avril 2012 Statut Membre Dernière intervention 4 juin 2012 - 18 mai 2012 à 10:32
Bonjour, dans le cadre d'un projet de développement, je dois récupérer dans une interface des informations que je dois stocker dans une base de données. Un premier JButton permet d'ajouter un élément sélectionné et de le stocker dans une ArrayList tandis que le second créer la chaine de caractère qui sera envoyée à la base de donnée. Cependant, en testant, j'ai l'impression que mon ArrayList n'a pas la bonne taille lorsque j'ajoute un élément (Par exemple j'entre deux éléments et la taille retournée reste à 1 ou 0 ...) Peut être le problème se situe-t-il au niveau du if ? ... je désespère^^

Voilà donc le code de la partie concernée

class MyListenerterminer implements ActionListener{

public void actionPerformed(ActionEvent event1){
ArrayList<String> compass2=new ArrayList<String>();
if((JButton)event1.getSource() == ajouter){
String compass=(refc.getSelectedItem().toString()+"-"+grpcompc.getSelectedItem().toString()+"-"+compc.getSelectedItem().toString()+", ");
compass2.add(compass);
JOptionPane.showMessageDialog(null,"Element : "+compass2.size()+" "+compass);
}

if((JButton)event1.getSource() == terminer){
StringBuilder sb=new StringBuilder();
for(int i = 0 ; i < compass2.size(); i++){
String s=compass2.get(i);
//JOptionPane.showMessageDialog(null,"nombre d'éléments : "+compass2.size()+" Chaine : "+s);
sb.append(s);
}

String compass3=sb.toString();
JOptionPane.showMessageDialog(null,"Exception: " +compass3);
try{
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/gestion_costebelle";
String user = "root";
String passwd = "";

Connection conn = DriverManager.getConnection(url, user, passwd);
Statement st1 = conn.createStatement();
String query1 ="";
int nb = st1.executeUpdate(query1);
}
catch (Exception e0) {
JOptionPane.showMessageDialog(null,"Exception: " +e0.getMessage());
}
}

}
}

Merci en tout cas pour votre aide.

Cordialement =)

4 réponses

cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
14 mai 2012 à 09:50
Salut,

Comme ça, je pense avoir une piste...

en fait, à chaque fois que tu cliques sur l'un de tes boutons, il va créer une arrayList et l'utiliser pour cet évènement... Donc si tu dois cliquer sur un bouton pour ajouter et sur un autre bouton pour envoyer à la DB, chaque click sur un bouton aura sa propre liste...

je te conseille de mettre ta variable compass2 en variable d'instance de ta classe MyListenerTerminer...
3
j0r6l Messages postés 17 Date d'inscription mercredi 11 avril 2012 Statut Membre Dernière intervention 4 juin 2012
14 mai 2012 à 09:17
Ah et petite précision, les petites fenêtres que j'ouvre ne sont là que pour m'aider à savoir d'où venait le problème ... Donc ne pas s'étonner si elles ont l'air d'avoir des contenus étranges ^^
0
Lyle56 Messages postés 240 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 19 juillet 2012 2
14 mai 2012 à 11:20
Salut

public void actionPerformed(ActionEvent event1){ 
ArrayList<String> compass2=new ArrayList<String>(); 
....


Je rejoint le poste précédent...
Et j'ajouterai même que à chaque fois que tu clique tu "efface" le clique précédent...

J'en profite juste pour "glisser" un ou deux conseil :

Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/gestion_costebelle";
String user = "root";
String passwd = "";

Connection conn = DriverManager.getConnection(url, user, passwd);
Statement st1 = conn.createStatement(); 


Toute cette partie la n'as rien à faire ici ...
Fait toi une classe de spécifique pour la connexion, avec la récupération de la connexion et l'exécution des requêtes.
Si jamais tu as besoin d'utiliser cette connexion dans une autre classe au moins tu ne dupliquera pas de code, et si tu doit modifié un paramètre, au moins tu ne le fait qu'as un seul endroit.



Sans maitrise, la puissance n'est rien
Il ne faut pas vendre la peau de l'ours, non il ne faut pas.
0
j0r6l Messages postés 17 Date d'inscription mercredi 11 avril 2012 Statut Membre Dernière intervention 4 juin 2012
18 mai 2012 à 10:32
Merci, j'ai trouvé, en fait il s'agissait bien de passage en variable d'instance.
Ps : Lyle 56 Tu as complètement raison, mais la connexion changera par la suite du développement du programme selon la fenêtre donc c'est encore là pour béta dirons nous^^
merci quand même de ton conseil.
0
Rejoignez-nous