Axel29
-
Modifié par Axel2903 le 27/05/2012 à 19:30
Bonjour,
Je suis débutant en Java et je dois réaliser un projet pour mon BTS IG. Dans ce projet, j'ai besoin de faire en sorte que une JCombobox récupère les différentes catégories de produits présents dans la base de données (MySQL), puis, une seconde JCombobox affiche les produits correspondants à cette catégorie (aussi présents dans la base de données MySQL).
Mon gros problème est que j'arrive à afficher les différentes catégories, et les produits de la première catégorie. Par contre, je n'arrive pas du tout à gérer le changement de catégorie, lorsque je clique sur une autre catégorie soit rien ne se passe soit les produits de la première catégorie se dédoublent mais impossible de gérer correctement le choix :S
Ca fait plusieurs jours que je coince sur ce problème et j'avoue que je commence à ne plus savoir quoi faire :S
Voici les bouts de codes correspondants:
public class Deviseur extends JFrame implements ActionListener {
private JComboBox<String> categ = new JComboBox<String>();
private JComboBox<String> produit = new JComboBox<String>();
public Deviseur(){
cont = getContentPane();
categ.addActionListener(new ItemAction());
cont.add(categ);
produit.addActionListener(new ItemAction());
cont.add(produit);
class ItemAction implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost/deviseur";
String user = "root";
String passwd = "";
Connection con = null;
try {
// Chargement du driver MySQL:
Class.forName(driver);
// Création de la connexion
con = DriverManager.getConnection(url, user, passwd);
// Création de la requête
Statement stm = con.createStatement();
// Exécution de la requête
ResultSet produits = stm.executeQuery("SELECT * FROM produit WHERE id_categorie='" + categ.getSelectedIndex()+1 + "';");
while(produits.next()){
produit.addItem(produits.getString("nom_produit"));
montant = produits.getObject(5).toString();
}
System.out.println("Montant: " + montant);
con.close();
} catch (Exception e1) {
System.out.println("ERROR :" + e1.getMessage());
e1.printStackTrace();
}
}
}
Ah oui et un autre petit problème est que le montant que je veux récupérer prend toujours le premier montant de la JCombobox produit puisque l'item passe en SELECTED puis DESELECTED (enfin d'après ce que j'ai cru comprendre sur le site du zéro).
Voilà si vous pouviez m'aider vous m'enlèveriez une épine du pied ^^"
class ItemAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
JComboBox cb = (JComboBox)arg0.getSource();
int categorie = (int)cb.getSelectedIndex()+1;
produit.removeAllItems();
updateProduits(categorie);
System.out.println("Catégorie : " + categorie);
}
protected void updateProduits(int categorie) {
// TODO Auto-generated method stub
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost/deviseur";
String user = "root";
String passwd = "";
Connection con = null;
try {
// Chargement du driver MySQL:
Class.forName(driver);
// Création de la connexion
con = DriverManager.getConnection(url, user, passwd);
// Création de la requête
Statement stm = con.createStatement();
// Exécution de la requête
ResultSet produits = stm.executeQuery("SELECT * FROM produit WHERE id_categorie='" + categorie + "';");
while(produits.next()){
produit.addItem(produits.getString("nom_produit"));
montant = produits.getObject(5).toString();
}
System.out.println("Montant: " + montant);
con.close();
} catch (Exception e1) {
System.out.println("ERROR :" + e1.getMessage());
e1.printStackTrace();
}
}
}
Et j'ai tout simplement supprimé la ligne
produit.addActionListener(new ItemAction());
au tout début de la classe Deviseur().
J'ai repris exactement le même principe pour le montant (j'ai juste eu quelques petits soucis à cause du nom des variables je me suis embrouillé du coup j'envoyais une mauvaise donnée mais vite réglé ^^)
Mais j'en profite pour poser une autre question, est-il possible de créer un bouton "+" qui créerait deux nouvelles JCombobox et cela autant de fois que l'on veut? Ce serait dans le but de pouvoir ajouter plusieurs produits et non pas un à un.