Problème de mise a jour JComboBox [Résolu]

H4rDBuG 47 Messages postés jeudi 14 janvier 2010Date d'inscription 26 juillet 2011 Dernière intervention - 1 juil. 2011 à 09:28 - Dernière réponse : H4rDBuG 47 Messages postés jeudi 14 janvier 2010Date d'inscription 26 juillet 2011 Dernière intervention
- 1 juil. 2011 à 16:18
Bonjour a toutes et a tous,

Je vous expose mon problème :
J'ai sur mon ihm 3 JPanel, chaque panel est dédié a une fonction (ajout/modif/suppr), mon problème est que quand je désire mettre a jour un produit, la modification du coté BDD est OK, sauf que le contenu de ma JComboBox de ma fonction suppr (qui est aussi remplit par le SQL) ne se change pas.

La JComboBox doit etre chargé au lancement de l'application, ce qui m'entraine une erreur quand je fait ma méthode :

if(e.getSource()==BModifProd)
{
try
{
GestionStocks.updateProd();
LConfMProd.setText("Modification effectuée !");
CLibSProd.removeAllItems();
cb_prod();
}
catch(Exception ioe){System.out.println(ioe);}
}

il me retourne une erreur de type nullPointerException (aie), ce qui me semble normal étant donné que la JComboBox est se vide entierement, et se fait remplir aussitot par la méthode cb_prod() ...

Je ne vois pas trop comment "mettre a jour" le contenu de ma JComboBox :/
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
H4rDBuG 47 Messages postés jeudi 14 janvier 2010Date d'inscription 26 juillet 2011 Dernière intervention - 1 juil. 2011 à 16:11
3
Merci
Au final j'avance un peu, j'ai trouvé pourquoi l'erreur survenait, en effet j'ai mis in itemListerner sur CLibSProd, et dans ce morceau de code, j'utilisais un StringTokenizer, l'erreur est du au fait que je vide la combobox et que mon stringTokenizer se retrouvait vide !

le code de mon itemListerner sur mon CLibSProd :

if(e.getSource()==CLibSProd)
{
StringTokenizer st1 = new StringTokenizer(CLibSProd.getSelectedItem().toString());
int NoProd = Integer.parseInt(st1.nextToken());

String reqInfoProd= "SELECT * "
+ "FROM Produit, Fournisseur, Categorie "
+ "WHERE Produit.NoFourn = Fournisseur.NoFourn "
+ "AND Produit.NoCateg = Categorie.Nocateg "
+ "AND NoProduit="+NoProd+";";
Statement stmtInfoProd;
Connection connInfoProd;

try
{
connInfoProd = DriverManager.getConnection("jdbc:mysql://localhost/stocks","root","");
stmtInfoProd = connInfoProd.createStatement();
ResultSet res = stmtInfoProd.executeQuery(reqInfoProd);
while(res.next())
{
SRefSProd.setText(res.getString("RefProduit"));
SPrixHTSProd.setText(Double.toString(res.getDouble("PrixHTProduit")));
SPrixTTCSProd.setText(Double.toString(res.getDouble("PrixTTCProduit")));
SPoidsSProd.setText(Double.toString(res.getDouble("PoidsProduit")));
SCategSProd.setText(res.getString("NomCateg"));
SFournSProd.setText(res.getString("NomFourn"));
}
res.close();
}
catch (Exception ioe){System.out.println(ioe);}
}

Pour remédier a cela, j'ai retirer le itemlistener, vider la combobox, rappeller l'itemlistener et relancer la méthode cb_prod();, voila le code :

if(e.getSource()==BModifProd)
{
try
{
GestionStocks.updateProd();
LConfMProd.setText("Modification effectuée !");
CLibSProd.removeItemListener(this);
CLibSProd.removeAllItems();
CLibSProd.addItemListener(this);
cb_prod();
}
catch(Exception ioe){ioe.printStackTrace();}
}

Donc maintenant que ce problème est géré, il faut que je trouve le moyen de mettre a jour le contenu de ma combobox ...

Merci H4rDBuG 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de H4rDBuG
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 1 juil. 2011 à 09:42
0
Merci
Normalement les comboBox se mettent a jour facilement avec les méthodes addItem et removeItem.

Je ne comprends pas d'où vient ta NullPointerException. Peux tu nous donner la trace de ton erreur ?
Commenter la réponse de cs_Julien39
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 1 juil. 2011 à 09:43
0
Merci
Et ajouter un peu de code pour qu'on puisse voir d'ou vient l'erreur précisément
Commenter la réponse de cs_Julien39
H4rDBuG 47 Messages postés jeudi 14 janvier 2010Date d'inscription 26 juillet 2011 Dernière intervention - 1 juil. 2011 à 09:50
0
Merci
Salut et merci de la rapidité de ta réponse.

Alors au tout début de la classe, lorsque j'initialise l'ihm :

cb_prod(); // méthode qui remplit toutes les combobox avec les libellés des produits

public void cb_prod()
{
String req= "SELECT * FROM Produit ORDER BY NoProduit;";
Statement stmt;
Connection conn;

try
{
conn = DriverManager.getConnection("jdbc:mysql://localhost/stocks","root","");
stmt = conn.createStatement();
ResultSet res = stmt.executeQuery(req);
while(res.next())
{
CLibMProd.addItem(res.getInt("NoProduit")+" - "+res.getString("LibProduit"));
CLibSProd.addItem(res.getInt("NoProduit")+" - "+res.getString("LibProduit"));
//CEntLibProd.addItem(res.getInt("NoProduit")+" - "+res.getString("LibProduit"));
//CSorLibProd.addItem(res.getInt("NoProduit")+" - "+res.getString("LibProduit"));
}
res.close();
}
catch (SQLException e){System.out.println(e);}
}

Ensuite, le code qui pose soucis :

if(e.getSource()==BModifProd)
{
try
{
GestionStocks.updateProd(); // on appelle la méthode pour mettre a jour dans la base de données
LConfMProd.setText("Modification effectuée !"); // on confirme la modification
CLibSProd.removeAllItems(); // on vide entierement la combobox de libProduit dans le panel "suppr"
cb_prod(); // on remplit la combobox de nouveau avec la BDD mise a jour
}
catch(Exception ioe){System.out.println(ioe);}
}

Voila je pense que j'ai tout mis ...
Commenter la réponse de H4rDBuG
H4rDBuG 47 Messages postés jeudi 14 janvier 2010Date d'inscription 26 juillet 2011 Dernière intervention - 1 juil. 2011 à 09:55
0
Merci
Je pense que l'erreur vient du fait que je fais un removeallItems(); ...
Commenter la réponse de H4rDBuG
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 1 juil. 2011 à 10:54
0
Merci
Il manque la trace de ton erreur, et j'aimerais bien voir les fonctions que tu appelles (là ou se trouvent les erreurs)
Commenter la réponse de cs_Julien39
H4rDBuG 47 Messages postés jeudi 14 janvier 2010Date d'inscription 26 juillet 2011 Dernière intervention - 1 juil. 2011 à 11:03
0
Merci
la trace de l'erreur :

java.lang.NullPointerException
at gestionstocks.IHM.itemStateChanged(IHM.java:1250)
at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1207)
at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1255)
at javax.swing.JComboBox.contentsChanged(JComboBox.java:1311)
at javax.swing.JComboBox.intervalRemoved(JComboBox.java:1333)
at javax.swing.AbstractListModel.fireIntervalRemoved(AbstractListModel.java:161)
at javax.swing.DefaultComboBoxModel.removeAllElements(DefaultComboBoxModel.java:169)
at javax.swing.JComboBox.removeAllItems(JComboBox.java:753)
at gestionstocks.IHM.actionPerformed(IHM.java:1329)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

et pour les fonction que j'appelle :

@Override
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==BModifProd)
{
try
{
GestionStocks.updateProd();
LConfMProd.setText("Modification effectuée !");
CLibSProd.removeAllItems();
cb_prod();
}
catch(Exception ioe){ioe.printStackTrace();}
}
}
Commenter la réponse de H4rDBuG
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 1 juil. 2011 à 11:20
0
Merci
Est ce que tu as initlisé ta JComboBox CLibSProd, avec un new, c'est elle qui est à null. Meme sii elle est vide, tu l'initialises à vide et tu n'auras pas cette erreur
Commenter la réponse de cs_Julien39
H4rDBuG 47 Messages postés jeudi 14 janvier 2010Date d'inscription 26 juillet 2011 Dernière intervention - 1 juil. 2011 à 14:57
0
Merci
J'ai essayé de la ré-initialisé a vide :

CLibSProd = new JComboBox();
cb_prod();

l'erreur n'est plus, mais il ne me met pas le nouveau contenu de la BDD qui est mis a jour
Commenter la réponse de H4rDBuG
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 1 juil. 2011 à 15:37
0
Merci
Si tu m'avais donné le code de GestionStocks.updateProd(); ainsi que la classe toute entière qui pose problème, ton problème serait surement déjà résolut...
Commenter la réponse de cs_Julien39
H4rDBuG 47 Messages postés jeudi 14 janvier 2010Date d'inscription 26 juillet 2011 Dernière intervention - 1 juil. 2011 à 15:39
0
Merci
bah le problème c'est que j'utilise un singleton, y'a au moins 4 classes et le tout y'en a pour pas loin de 2000 lignes de code ... envoie moi ton mail en privé et je t'envoie directement le projet en .rar si tu veux
Commenter la réponse de H4rDBuG
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 1 juil. 2011 à 15:48
0
Merci
Les nullPointerException sont normalement faciles à trouver en mode debug.

Ce qui se passe, c'est que tu dois à un moment donné instancier ton JComboBox à null, ou alors tu as une méthode qui le rend null.

L'erreur survient quand tu essayes de vider don JComboBox, ce n'est pas le fait de vider qui te génère l'erreur.
Commenter la réponse de cs_Julien39
H4rDBuG 47 Messages postés jeudi 14 janvier 2010Date d'inscription 26 juillet 2011 Dernière intervention - 1 juil. 2011 à 15:53
0
Merci
Bah justement, je sais pas trop, sa ne vient pas de la méthode updateProd(); car la mise a jour s'effectue bien au niveau de la base de données, et l'erreur est soulignée a la ligne ou je fait CLibSProd.removeAllItems(); ... si je met cette ligne la en commentaire, il n'y a plus d'erreurs, et cb_prod() marche niquel, sauf que sa me rajoute les occurences dans la combobox qui n'est pas vidé, et je me retrouve donc avec toutes les infos en double ...
Commenter la réponse de H4rDBuG
H4rDBuG 47 Messages postés jeudi 14 janvier 2010Date d'inscription 26 juillet 2011 Dernière intervention - 1 juil. 2011 à 16:13
0
Merci
Et encore (désolé pour le triple post), ce n'est pas mettre a jour le contenu entier de ma combobox, mais seulement l'item que j'ai modifié ... donc un seul item
Commenter la réponse de H4rDBuG
H4rDBuG 47 Messages postés jeudi 14 janvier 2010Date d'inscription 26 juillet 2011 Dernière intervention - 1 juil. 2011 à 16:18
0
Merci
(quadruple post pas taper svp)

la mise a jour de la combobox est faite automatiquement, du fait que je rappelle la méthode cb_prod(); (légèrement modifiée)

Donc ca marche niquel !

Merci beaucoup Julien39 de m'avoir aidé (sans tes questions j'aurais jamais trouvé d'ou venait l'erreur ^^), j'ai encore un peu de mal avec la logique :/

Merci beaucoup et si quelqu'un a des questions, envoyez-moi un message privée ;)

H4rDBuG
Commenter la réponse de H4rDBuG

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.