Oui, tout y est créer sauf le chef de chantier :
Oui, tout y est créer sauf le chef de chantier :
D'accord, donc il faut regarder comment la zone activité est mise à jour dans le 1er formulaire (gestion des plans de prévention)
pour cela, regarde dans les évènements de la JCombobox de "société"
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
Les évènements ?
C'est à dire que je prenne le nom de la combobox et que je recherche dans fenetre (CTRL + F) pour voir ce qu'il ressort ? (c'est assez fastidieux)
Pas avec Ctrl+F mais avec Alt+F7
Tu n'as jamais vu d'évènements avant ?
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
je ne pensais pas que ca s'appliquais aussi pour le graphique... je suis un peu perdu excuses moi
Et donc j'essaye de recopier ce qui s'applique à elle sur l'autre ?
==> j'aime pas du tout cette manière de fonctionner...
Pourtant j'ai bien écrit : regarde dans les évènements de la JCombobox de "société"
car c'est la mise à jour de cette JCombobox qui provoque l'affichage de l'activité ...
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
Ralala je suis vraiment pas doué
J'ai pris tout le truc : jTabbedPaneInfoSociete (oui je sais, c'est pas ca... je continus)
J'ai pris ca : jPanelInfoSociete (mais c'est ca ressemble pas à JCombobox non plus... en plus tout est créer par l'appli...)
J'ai encore cherché mais je seche... je pense pas qu'il ai utilisé un combobox
J'ai l'impression que ca va saigner
Et le machin entre le JLabel "Société" (en rouge) et le bouton "Créer" ... ce n'est pas un JComboBox ?
et il doit avoir un Listener attaché
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
Ah un menu déroulant est une combo box ! ok !
C'est là que c'est interessant, ce n'est pas sur un onClick que l'event se produit.
D'abord on clique, ca selectionne l'item, ca referme le menu enfin... la combobox et tant qu'on click pas ailleurs, ca rafraîchie pas le jTextFiled.
Je vais voir en détail comment cette jComboBox réagis...
regarde s'il a un évènement .addFocusListenertant qu'on click pas ailleurs
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
Les .addFocusListener sont uniquement créer par l'application, RAS coté développer.
J'ai trouvé cette fonction :
Et j'ai un petit paquet pour l'autre (celui qui pose problème) :
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 private void jComboBoxSocieteRecupererActiviteSociete(java.awt.event.FocusEvent evt) { Societe societeP = new Societe(); societeP.setNom((String) jComboBoxSociete.getSelectedItem()); try { Connexion connexion = new Connexion(); PreparedStatement ps = connexion.getConnexion().prepareStatement("" + "SELECT ActiviteSociete " + "FROM Societe " + "WHERE NomSociete = ? order by NomSociete;"); ps.setString(1, societeP.getNom()); ResultSet resultats = ps.executeQuery(); resultats.next(); jTextFieldActivite.setText(resultats.getString(1)); } catch (Exception e) { e.printStackTrace(); } }
Je pense que ce qui nous intéresse est ici :
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 private void jComboBoxSocieteSTFocusGained(java.awt.event.FocusEvent evt) { Utilitaire.remplirComboBox(jComboBoxSocieteST, "SELECT NomSociete FROM Societe order by NomSociete;"); } private void jButtonAnnulerSTActionPerformed(java.awt.event.ActionEvent evt) { jDialogAjoutSousTraitant.dispose(); Utilitaire.reinitialiserTableau((DefaultTableModel)jTableST.getModel()); } private void jComboBoxSocieteSTFocusLost(java.awt.event.FocusEvent evt) { String nomSociete = (String) jComboBoxSocieteST.getSelectedItem(); try { Connexion connexion = new Connexion(); PreparedStatement ps = connexion.getConnexion().prepareStatement("" + "SELECT ActiviteSociete " + "FROM Societe " + "WHERE NomSociete = ?;"); ps.setString(1, nomSociete); ResultSet resultats = ps.executeQuery(); resultats.next(); jTextFieldActivite.setText(resultats.getString(1)); if (resultats.getString(1) == null) { PreparedStatement ps2 = connexion.getConnexion().prepareStatement("" + "SELECT NomCC, PrenomCC " + "FROM ChefChantier " + "WHERE ChefChantier.IdSociete IN (" + "SELECT IdSociete " + "FROM Societe " + "WHERE NomSociete = ?);"); ps2.setString(1, nomSociete); ResultSet resultats2 = ps2.executeQuery(); resultats2.next(); jTextFieldActivite.setText(resultats2.getString(1)); } } catch (Exception e) { e.printStackTrace(); } jTextFieldTelST.setText(ChefChantier.recupererTelCC(jComboBoxChefChantierST)); } private void jButtonAjouterSTActionPerformed(java.awt.event.ActionEvent evt) { String societe = (String) jComboBoxSocieteST.getSelectedItem(); String activite = (String) jTextFieldActiviteST.getText(); String chefChantier = (String) jComboBoxChefChantierST.getSelectedItem(); String tel = (String) jTextFieldTelST.getText(); try { if (Societe.rechercherST(jTableST, societe, 0) == false) { Societe.ajoutST(jTableST, jLabelErreurAjoutST, jComboBoxSocieteST.getSelectedItem(), jTextFieldActiviteST.getText(), jComboBoxChefChantierST.getSelectedItem(), jTextFieldTelST.getText()); jComboBoxSocieteST.setSelectedIndex(-1); jComboBoxChefChantierST.setSelectedIndex(-1); jTextFieldActiviteST.setText(null); jTextFieldTelST.setText(null); try { log.UpdateLog("ajout sous traitants"); } catch (FileNotFoundException ex) { Logger.getLogger(Fenetre.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Fenetre.class.getName()).log(Level.SEVERE, null, ex); } } else { jDialogErreurDejaPresent.setVisible(true); try { log.UpdateLog("sous traitants déja présent"); } catch (FileNotFoundException ex) { Logger.getLogger(Fenetre.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Fenetre.class.getName()).log(Level.SEVERE, null, ex); } } } catch(Exception e) { e.printStackTrace(); jDialogErreurChampVide.setVisible(true); try { log.UpdateLog("erreur champs vide sous traitants"); } catch (FileNotFoundException ex) { Logger.getLogger(Fenetre.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Fenetre.class.getName()).log(Level.SEVERE, null, ex); } catch (Exception ex) { ex.printStackTrace(); } } }
C'est justement ici que j'ai rajouté la comparaison du null car j'avais une erreur.
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 private void jComboBoxSocieteSTFocusLost(java.awt.event.FocusEvent evt) { String nomSociete = (String) jComboBoxSocieteST.getSelectedItem(); try { Connexion connexion = new Connexion(); PreparedStatement ps = connexion.getConnexion().prepareStatement("" + "SELECT ActiviteSociete " + "FROM Societe " + "WHERE NomSociete = ?;"); ps.setString(1, nomSociete); ResultSet resultats = ps.executeQuery(); resultats.next(); jTextFieldActivite.setText(resultats.getString(1)); if (resultats.getString(1) == null) { PreparedStatement ps2 = connexion.getConnexion().prepareStatement("" + "SELECT NomCC, PrenomCC " + "FROM ChefChantier " + "WHERE ChefChantier.IdSociete IN (" + "SELECT IdSociete " + "FROM Societe " + "WHERE NomSociete = ?);"); ps2.setString(1, nomSociete); ResultSet resultats2 = ps2.executeQuery(); resultats2.next(); jTextFieldActivite.setText(resultats2.getString(1)); } } catch (Exception e) { e.printStackTrace(); } jTextFieldTelST.setText(ChefChantier.recupererTelCC(jComboBoxChefChantierST)); }
Maintenant que je sais ce qu'est une combo box, j'ai du mal à comprendre pourquoi je peux avoir un résultat null alors que la combo box est rempli d'item résultant d'une requête...
Post #531, je pense être arrivé à la saturation de notre maître Népomucène
les trois private void jComboBoxSociete... ne se déclenchent pas tous seuls comme des grands.
Il sont rattachés à leurs comboBox par addFocusListener (sinon ils ne peuvent pas se déclencher)
-> dans ton "paquet" n°2 vérifie donc que jComboBoxSocieteSTFocusLost est bien utilisé dans un addFocusListener (Alt+F7 sur jComboBoxSocieteSTFocusLost )
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
Je pense que tu parles de ceci :
C'est du code généré par l'application (grisé).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 jComboBoxSocieteST.addFocusListener(new java.awt.event.FocusAdapter() { public void focusGained(java.awt.event.FocusEvent evt) { jComboBoxSocieteSTFocusGained(evt); } public void focusLost(java.awt.event.FocusEvent evt) { jComboBoxSocieteSTFocusLost(evt); } });
Oui on peut dire à NetBeans de relier directement les listeners.C'est du code généré par l'application (grisé).
Bon, on sait que c'est connecté.
du coup, c'est jComboBoxSocieteSTFocusLost qui ne se déclenche pas quand tu choisis une société ?
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
Ouais c'est ca, rien ne s'affiche dans la filedTextBox ST.
Par contre derrière ca se met à jour mais uniquement quand je click sur la fieldtextbox. si je click dans le vert (dans rien) rien ne bouge ...
Par où commencer à chercher ?
dans le code, c'est le JTextField jTextFieldActivite qui est rempli et non jTextFieldActiviteST
Vérifie les noms des JTextField qui sont impactés
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
C'est parfait, tu m'as encore une fois bien aiguillé !
J'ai rajouté la dernière ligne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 private void jComboBoxSocieteSTFocusLost(java.awt.event.FocusEvent evt) { String nomSociete = (String) jComboBoxSocieteST.getSelectedItem(); try { Connexion connexion = new Connexion(); PreparedStatement ps = connexion.getConnexion().prepareStatement("" + "SELECT ActiviteSociete " + "FROM Societe " + "WHERE NomSociete = ?;"); ps.setString(1, nomSociete); ResultSet resultats = ps.executeQuery(); resultats.next(); jTextFieldActivite.setText(resultats.getString(1)); jTextFieldActiviteST.setText(resultats.getString(1));
maintenant que je sais un peu mieux naviguer entre le GUI et le code, je vais voir pourquoi la liste des chef de chantier ne charge pas !
Je reviendrais en cas de blocage ! Merci Népo !
Est il possible d'envoyer une requête préparé en argument ?
Ma fonction :
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 private void jComboBoxCCFocusGained(java.awt.event.FocusEvent evt) { String NomSociete = (String)jComboBoxSociete.getSelectedItem(); System.out.print(NomSociete); try{ Connexion connexion = new Connexion(); PreparedStatement ps = connexion.getConnexion().prepareStatement("" + "SELECT NomCC, PrenomCC " + "FROM ChefChantier " + "WHERE ChefChantier.IdSociete IN (" + "SELECT IdSociete " + "FROM Societe " + "WHERE NomSociete = ?);"); ps.setString(1, NomSociete); ResultSet resultats = ps.executeQuery(); boolean resultatOk = resultats.next(); System.out.print("resultats.getString(1) :"+resultats.getString(1)); if (resultatOk) { Utilitaire.remplirComboBoxCC(jComboBoxCC, resultats.getString(1)); } jTextFieldTelCC.setText(ChefChantier.recupererTelCC(jComboBoxCC)); } catch (Exception e) { e.printStackTrace(); } }
Forcement ma méthode attends une requête et recoit un résultat... ca peut pas aller !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public static void remplirComboBoxCC(JComboBox j, String query) { try { Connexion connexion = new Connexion(); ResultSet resultats = connexion.getResultSet(query); j.removeAllItems(); while (resultats.next()) { j.addItem(resultats.getString(1)+", "+resultats.getString(2)); } } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(null,e.getMessage()); } }
Elle n'est utilisé que deux fois mais les deux fois nécessite une preprared !
Je change plutôt la méthode ?
Je comprend pas trop ce resultats.getString(2), je vais faire un echo pour voir ce que ca dit ...
Oui, tu peux passer toute genre de type comme paramètre. Mais avec ce que t'as, tu peux appeler la méthode comme ça:Est il possible d'envoyer une requête préparé en argument ?
Pourquoi ne pas utiliser une seule requête avec jointure? Au lieu de faire une requête avec sous-requête et d'utiliser son résultat dans une autre requête comme tu le fais, c'est très pénalisant au niveau de performance et aussi difficile à maintenir.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 String query = "Select * from la_table where nomColonne = '"+resultats.getString(1)+"'"; Utilitaire.remplirComboBoxCC(jComboBoxCC, query);
PS: Ne colorie pas ton code mais utilise un commentaire puisque ça casse toute la coloration syntaxique, je te l'avais déjà fait remarquer.
A+.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager