Eclipse est certainement bien, mais comme je ne le connais pas, j'aurai du mal à te guider.
NetBeans a la réputation d'être meilleur pour la composition des écrans.
Perso, je n'ai jamais eu l'occasion de comparer.
Version imprimable
Eclipse est certainement bien, mais comme je ne le connais pas, j'aurai du mal à te guider.
NetBeans a la réputation d'être meilleur pour la composition des écrans.
Perso, je n'ai jamais eu l'occasion de comparer.
c'est ok pour le CRUD de Fabricant!!!:ccool:
Et je fais quoi pour la suite??
Tu as fait un écran JFrame avec lequel on peut créer la fiche d'un fabricant dans MySQL, retrouver cette fiche, la modifier et la supprimer éventuellement ?
Vous pouvez regarder le projet!!!
je suis arrivé a me connecter dans la base,a modifier,ajouter et supprimer des fabricants!!!
Au fait j'ai pas utilisé JFrame mais plutot JPabel!!!
C'est parfait. :ccool:
Bien sûr, je n'ai pas pu le faire fonctionner car je n'ai pas la base.
Cependant, j'ai vu que tu fais une bonne utilisation du preparedStatement.
Tu n'es pas aussi débutant que tu le disais :)
euh ben si, tu as bien utilisé des JFrame comme IHM, tout va bienCitation:
Au fait j'ai pas utilisé JFrame mais plutot JLabel!!!
J'ai vu que tu composes ton écran entièrement à la main.
Comme tu es sur NetBeans, je te recommande de consacrer un peu de temps (un ou deux jours)
à la prise en main de la composition d'écran :
Dans ton projet, tu fais :
clic droit sur ton package "controleur" -> New -> JFrame form -> nom du JFrame "MonTest" -> validate
Sous tes yeux émerveillés, apparaît alors un JFrame au centre et une palette de composant
(JTextfield, JList, JButton, etc ...) que tu peux faire glisser dans le JFrame et positionner à ta guise.
Il y a, au-dessus du JFrame un bouton "source" qui te permet de voir NetBeans pondre le code à ta place 8-)
Bien sûr, tu ajoutes le code nécessaire. Par exemple, en cours de placement d'un bouton,
tu fais un clic-droit sur le bouton -> events -> Action - > Actionperformed -> et paf tu peux y mettre tout de suite
le code qui doit se déclencher quand on clique sur le bouton.
Une fois maîtrisé, ce système te fais gagner des millions d'heures dans la composition des écrans
et puis tu vois directement ce que tu fais !!!
La suite du projet est classique :
- faire un écran d’accueil avec des boutons ou un menu pour ouvrir les différents écrans que tu auras composés.
- il faudra compléter la base de données des champs manquants afin de faire des écrans de saisie assez complet
pour les présenter au client (ou commanditaire) et montrer l'avancement du projet
Avec ce que j'ai vu de ce que tu sais déjà faire, tu devrais y arriver sans trop de problème.
N'hésites pas à poster en cas de difficulté ponctuelle.
Dès que cela va se compliquer (écrans complexes, Impression d'état, statistiques, déploiement, ...)
alors on continue notre discussion.
à+
Salut,de retour....
bon je crois que j'ai fait toutes les vues necessaires que j'avais dans mon modele,maintenant alors que me reste t-il a faire???
je ne sais pas mais je pense bien que le plus difficile est a venir!!!!!!:(
Les écrans de saisie CRUD ?
Si ce n'est pas top secret, peux-tu poster la structure de la base (script sql ou schéma) pour que je compare avec ton cahier des charges ?
Si la base est bien structurée alors pas de problème.
Par ailleurs, je trouve que si tu continues à avancer à ce rythme, la partie écran pourrait être bouclée la semaine prochaine.
Là où tu passeras le plus de temps c'est sur les états (on en reparlera)
Oui les ecrans de saisie CRUD...
voici la structure de le base:
CREATE DATABASE GestioNRJ;
use GestioNRJ;
mysql> Create table Equipement(id_equipement varchar(15) not null,nom_equipement varchar(50),num_serie varchar(20) REFERENCES serie(num_serie),num_type varchar(20) not null REFERENCES Type_equipement(num_type),id_fabricant varchar(25) REFERENCES fabricant(id_fabricant),prix_equi string,primary key(id_equipement));
Interventions :
mysql> Create table Interventions(id_intervention varchar(15) not null,nom_intervention varchar(20),id_equipement varchar(15) references Equipement(id_equipement),date_deb varchar(15),date_fin varchar(15),type_intervention varchar(25),primary key(id_intervention));
Type_equipement :
mysql>Create table Type_equipement(num_type varchar(20), nom_type varchar(25),primary key(num_type));
Fabricants :
mysql> create table fabricant(id_fabricant varchar(25) not null,nom_fabricant varchar(25),tel varchar(15),adresse varchar(35),email varchar(35),primary
key(id_fabricant));
Zone :
mysql>Create table Zone(num_zone varchar(15),nom_zone varchar(25),primary key(num_zone)) ;
Sont_transmis :
mysql> create table sont_transmis(id_equipement varchar(15) references Equipement(id_equipement),num_zone varchar(15) references zone(num_zone),date_deb_affect varchar(15),date_fin_affect varchar(15);
Serie :
mysql> Create table serie(num_serie varchar(20),nom_serie varchar(25),primary key(num_serie));
et pour le cahier de charge je crois que je l'avais mis en piece jointe!!!
table Equipement :
- id_equipement varchar(15) : OK si la numérotation de l'équipement existe déjà, sinon il est malin d'utiliser un entier auto-incrémenté
- il n'y a pas de champs pour enregistrer les capacités d’utilisation
- je suppose que la date de mise en service = 1ère date de la table "sont_transmis"
- prix_equi ne doit pas être en varchar (string ?) il faut le mettre en numérique (sinon pb de calcul)
table Serie :
- à quoi sert-elle exactement ?
table Interventions :
- ajouter un champ descriptif (varchar(2000) par exemple) pour mettre un compte-rendu d'intervention
- ajouter une date de clôture de l'intervention
- ajouter un champ varchar(200) indiquant éventuellement une suite à donner (très fréquent)
- ajouter un champ coût (numérique) qui sera alimenté par une table d'interventions-type (voir plus bas)
et qui sera modifiable pour chaque intervention
Créer une table de d'interventions-types ce qui permet d'y mettre un libellé et un coût standard
D'une façon générale, il vaut mieux pour les ID (clés primaires des tables) de les mettre en entier auto-incrémenté
comme ça c'est la base MySQL qui s'occupe de créer la clé.
Dans un environnement multi-utilisateurs, c'est essentiel (il ne faut pas que l'application cliente soit en charge des clés primaires)
oui mais je n'est jamais utilise auto-increment dans mes programmes,je ne c'est pas si je pourrais les gerer??
demain matin j'y travaillerais essentiellement!!!!
je l'avais creee pour connaitre exactement la serie de l'equipement,comme dans les telephones portable!!!!Citation:
table Serie :
- à quoi sert-elle exactement ?
je comprend pas trop!!!!Citation:
Créer une table de d'interventions-types ce qui permet d'y mettre un libellé et un coût standar
Mettre un label dans une base de données :sm: super pour l'internationalisation, par contre j'y mettrais un code ;-)
La table "sont_transmis" n'a pas de primary key.
Ca manque cruellement d'index si tu veux effectuer des recherches, analyses tes requêtes SQL pour voir quelles colonnes tu utilises dans les clauses WHERE ou JOIN.
De plus, je ne sais pas si MySQL fonctionne comme Oracle, mais Oracle ne crée pas d'index pour les clés étrangères (clause REFERENCES de tes ordres CREATE TABLE).
Explication pour auto-incrément (ou numérotation automatique ou encore compteur ...) :
Dans ta table intervention, chaque intervention doit être numérotée.
Avant même d'être une règle informatique, c'est une règle de gestion
car les bons d'interventions "papiers" que les personnes auront entre leurs mains
doivent comporter une date et un numéro.
Du coup, pour que l'application fournisse un numéro unique (fiable),
il faut que la base MySql s'occupe elle-même de la numérotation.
Il suffit de spécifier AUTO_INCREMENT sur le champ ID au format entier.
exemple ici : http://dev.mysql.com/doc/refman/5.0/...increment.html
Pourquoi ne pas le faire calculer par Java ?
1) Parce que l'application est multi-utilisateurs et donc si 2 utilisateurs cherchent à ajouter une fiche d'intervention en même temps, on a de bonnes chances qu'ils se retrouvent avec le même numéro au même moment.
2) Parce qu'il faudrait lancer une requête pour trouver le numéro le plus grand, ajouter +1 et finalement refaire une requête d'insertion.
Fais des tests avec l'exemple cité plus haut. Par rapport à la structure de ta base,
avec l'AUTO_INCREMENT tu élimineras pratiquement tous les problèmes de clés primaires.
Je n'ai toujours pas bien compris à quoi sert la table Series
Vraiment très interessant ce topic, j'ai appris beaucoup de choses :ccool:
Oui Népomucène je c'est bien comment faire l'auto-increment sur mysqlCitation:
Du coup, pour que l'application fournisse un numéro unique (fiable),
il faut que la base MySql s'occupe elle-même de la numérotation.
Il suffit de spécifier AUTO_INCREMENT sur le champ ID au format entier.
mais mon probléme c'est comment le gerer dans mon programme :oops:?
Il parle d'optimisation d'accès aux données.
Il est trop top pour s'en préoccuper, on en est seulement au stade de la maquette.
La base va très bien fonctionner sans cela pour l'instant.
Tu dois te concentrer sur le choix des champs et leur type
@Nemek
Je ne vois pas de quoi tu parlesCode:Mettre un label dans une base de données
Justement, l'intérêt du système c'est que dans ton programme ... tu n'as rien à faire :mrgreen:
Quand un utilisateur ajoutera une fiche d'intervention,
l'application utilisera une requête "INSERT" pour les champs de la table SAUF pour l'ID qui sera généré automatiquement par la base.
Tu ajoutes un champ 'id' auto-incrémenté.
Les index permettent d'optimiser les accès.
Cas typique :
J'ai une table personne avec un champ 'id' auto incrémenté comme clé primaire et un champ 'nom'. Si je fais une recherche sur le nom (SELECT * FROM personne WHERE nom LIKE 'dupont%') sans index le SGBD va parcourir toute la table pour tester chaque enregistrement. Avec un index qui va se positionner intelligemment à l'endroit (enregistrement) où il est susceptible de trouver un enregistrement et il s'arrêtera intelligemment lorsqu'il aura atteint un endroit (enregistrement) où il sait qu'il ne trouvera plus d'enregistrement satisfaisant la condition.
Pour moi c'est à faire au moment du design, si je sais que j'accède à une information non pas par son identifiant généré mais par une autre données => il faut créer un index.
Pour récupérer la valeur générée, il utiliser la méthode java.sql.Statement.execute(java.lang.String,int) et ensuite java.sql.Statement.getGeneratedKeys().
@Nemek
-> oui quand on a de l'expérience sur les SGBD,Citation:
Pour moi c'est à faire au moment du design
-> non dans le cas de grfall qui doit d'abord faire une structure cohérente avant de passer à l'optimisation
Tes conseils, bien que techniquement corrects, ne sont pas adaptés à un débutant.
En effet, les utilisateurs qui vivent dans le monde réel, ont besoin de savoir de quelle intervention il s'agit,Citation:
une table d'interventions-types ce qui permet d'y mettre un libellé
la désignation doit être claire ; un code ne suffit pas.
Quant à l’internationalisation, grfall n'en a pas parlé.
je crois que j'ai reglé ces problémes:
structure de ma table interventions:
+--------------------+---------------+------+-----+---------+----------------
| Field | Type | Null | Key | Default | Extra
+--------------------+---------------+------+-----+---------+----------------
| id_intervention | int(11) | NO | PRI | NULL | auto_increment
| nom_intervention | varchar(20) | YES | | NULL |
| id_equipement | int(11) | NO | | NULL |
| date_deb | varchar(25) | YES | | NULL |
| date_fin | varchar(25) | YES | | NULL |
| type_intervention | varchar(25) | YES | | NULL |
| desc_intervention | varchar(2000) | YES | | NULL |
| suite_intervention | varchar(200) | YES | | NULL |
| cout_intervention | decimal(10,0) | YES | | NULL |
+--------------------+---------------+------+-----+---------+----------------
structure de ma table equipement:
+------------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------------+------+-----+---------+----------------+
| id_equipement | int(11) | NO | PRI | NULL | auto_increment |
| nom_equipement | varchar(50) | YES | | NULL | |
| num_serie | varchar(20) | YES | | NULL | |
| num_type | varchar(20) | NO | | NULL | |
| id_fabricant | int(11) | NO | | NULL | |
| prix_equi | decimal(10,0) | YES | | NULL | |
| etat_equipement | varchar(20) | YES | | NULL | |
| date_acquisition | varchar(15) | YES | | NULL | |
+------------------+---------------+------+-----+---------+----------------+
OK. On ne va pas entrer trop dans le détail ;
on fera des ajustements le moment venu en fonction des besoins.
Maintenant, avant de passer à la suite, je reviens sur la la table Serie.
Peux-tu me donner un exemple de données que tu veux y mettre ?
bon je pensais tout simplement que plusieurs équipements pouvaient appartenir a un meme numero de serie;comme j'ai dit avec les telephones portables:EXEMPLE :NOKIA N70
donc je voulais mettre dans la table serie le numero de serie et le nom de serie,mais si sa n'en vaut pas la peine je peux l'enlever!!!!!
Non, c'est très bien.
J'ai cru un moment que tu voulais y mettre les n° de fabrication des appareils
(numéro unique par appareil donné par le fabricant).
Cela dit, comme il reste pas mal de chose à voir,
vérifie que ceci soit bien indispensable (ne pas alourdir la maquette) ;)
Bon, je suppose que tu as déjà saisis quelques équipements.
As-tu déjà fait l'écran de saisie de la fiche d'intervention ?
Elle doit comprendre la date, l'objet et
surtout un système de recherche de l'équipement sur lequel
a été effectué la maintenance (JComboBox ou JList par exemple) ?
L'idée c'est que le technicien, au moment de saisir sa fiche d'intervention,
puisse choisir l'équipement sur lequel il est intervenu dans une "liste déroulante"
(JList est pour l'instant le meilleur choix, il faudra l'améliorer plus tard,
car je suppose que le parc d'équipement est grand et la JList ne suffira plus)
Informatiquement, il faut stocker l'ID de l'équipement dans le champ id_equipement
de la table des interventions.
Pour alimenter la JList, la solution classique est donc de créer
une petite classe "equipement" avec 2 champs :
- id_equipement (int)
- nom_equipement (String)
avec les getter et les setter qui vont bien.
Tu définis aussi la méthode ToString dans cette classe renvoyant le nom_equipement,
afin d'afficher correctement l'équipement dans la JList
Tu fais une requêtepour remplir un ArrayList<equipement>Code:SELECT id_equipement, nom_equipement FROM equipements
Puis tu remplis ta JList avec l'ArrayList transformée en tableau d'objet (méthode toArray())
Quand l'utilisateur va cliquer dans la JList, tu récupère l'objet sélectionné
et avec getId_equipement() tu récupère l'ID que tu pourras passer à la requête de mise à jour de la table interventions.
Ce système d'appel d'une liste de référence pour renseigner une table d'activité est essentiel.
Une fois que tu le maîtrise, tu n'as plus de problème pour construire une application
s'appuyant sur une base de données relationnelle.
J'ai bien compris le principe Népomucène mais le hic c'est que j'arrive pas a le faire:cry:!!!!
dans ma table interventions j'ai bien id_equipement,j'ai aussi creé une JList et j'avais déjà une classe equipement
maintenant il me tarde a faire la classe qui me permettra d'afficher les donnees de l'equipement dans la JList!!!!!
montres-moi :
- ta classe équipement
- ce que tu as essayé de faire avec la JList
la classe equipement c'est la ou j'avai mis les getters et le setters:
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62publicclass Equipement implements Serializable{ privateintid_equipement; private String nom_Equipement; publicintnum_serie; publicintnum_type; publicintid_fabricant; privatedoubleprix_equi; private String etat_equipement; private String date_acquisition; publicint getID_equi() { returnid_equipement; } publicvoid setID_Equi(int id_equipement) { this.id_equipement = id_equipement; } public String getNom_equi() { returnnom_Equipement; } publicvoid setNom_equi(String nom_Equipement) { this.nom_Equipement = nom_Equipement; } publicint getNum_serie() { returnnum_serie; } publicvoid setNum_serie(int num_serie) { this.num_serie = num_serie; } publicint getNum_type() { returnnum_type; } publicvoid setNum_type(int num_type) { this.num_type= num_type; } publicint getCode() { returnid_fabricant; } publicvoid setCode(int id_fabricant) { this.id_fabricant = id_fabricant; } publicdouble getPrix() { returnprix_equi; } publicvoid setPrix(double prix_equi) { this.prix_equi = prix_equi; } public String getETAT_equi(){ returnetat_equipement; } publicvoid setETAT_equi(String etat_equipement){ this.etat_equipement=etat_equipement; } public String getDATE_acquisition(){ returndate_acquisition; } publicvoid setDATE_acquisition(String date_acquisition){ this.date_acquisition=date_acquisition; } }
Ajoute à cette classe :
Cette méthode sera automatiquement appelée par JList pour afficher le nom de l'équipement.Code:
1
2
3
4public String toString(){ return getNom_equi(); }
tu reprends ensuite mon post d'hier 10h46 à partir de "Tu fais une requête ..."
j'ai un probleme avec ma JList,c'est la première fois que je l'utilise avec les bases de données,je n'arrive pas à la remplir,voici ma classe:
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
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299 package controleur; import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.*; import modele.*; public class FenInterv extends JFrame implements ActionListener { private JLabel lid_intervention,lnom_intervention,lid_equipement,ldate_deb,ldate_fin,ltype_intervention,ldesc,lsuite,lcout,lequi; private JTextField chid_intervention,chnom_intervention,chid_equipement,chdate_deb,chdate_fin,chtype_intervention,chdesc,chsuite,chcout; private JList list_equi; private JButton eg,qt,back,ff,af,mod,sup; private JPanel pan1,pan2,pan3; private String[]tequi; //pour remplir la liste private AccesInterv clibd=null; private int num; private ArrayList liste; public FenInterv() { clibd = new AccesInterv(); lid_intervention = new JLabel("Identifiant:",SwingConstants.CENTER); lnom_intervention= new JLabel("Nom Intervention:",SwingConstants.CENTER); lid_equipement= new JLabel("id_equipement:",SwingConstants.CENTER); ldate_deb= new JLabel("Date Debut:",SwingConstants.CENTER); ldate_fin= new JLabel("Date Fin:",SwingConstants.CENTER); ltype_intervention=new JLabel("Type Intervention:",SwingConstants.CENTER); ldesc=new JLabel("Descript Intervention:",SwingConstants.CENTER); lsuite=new JLabel("Suite Intervention:",SwingConstants.CENTER); lcout=new JLabel("Cout Intervention",SwingConstants.CENTER); lequi=new JLabel("Equipements:",SwingConstants.CENTER); chid_intervention = new JTextField(30); chnom_intervention=new JTextField(30); chid_equipement=new JTextField(30); chdate_deb = new JTextField(30); chdate_fin= new JTextField(30); chtype_intervention=new JTextField(30); chdesc=new JTextField(30); chsuite=new JTextField(30); chcout=new JTextField(30); list_equi=new JList();//normalement je devais ecrire new JList(tequi) list_equi.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); eg= new JButton("Enregistrer"); back=new JButton("<<"); ff = new JButton(">>"); af = new JButton("Afficher"); mod = new JButton("Modifier"); sup = new JButton("Supprimer"); qt= new JButton("Quitter"); pan1=new JPanel(); pan2=new JPanel(); pan3=new JPanel(); pan1.setLayout(new GridLayout(0,1)); pan2.setLayout(new GridLayout(0,1)); pan1.add(lid_intervention); pan1.add(lnom_intervention); pan1.add(lid_equipement); pan1.add(ldate_deb); pan1.add(ldate_fin); pan1.add(ltype_intervention); pan1.add(ldesc); pan1.add(lsuite); pan1.add(lcout); pan1.add(lequi); pan2.add(chid_intervention); pan2.add(chnom_intervention); pan2.add(chid_equipement); pan2.add(chdate_deb); pan2.add(chdate_fin); pan2.add(chtype_intervention); pan2.add(chdesc); pan2.add(chsuite); pan2.add(chcout); pan2.add(list_equi); pan3.add(eg); pan3.add(back); pan3.add(ff); pan3.add(af); pan3.add(mod); pan3.add(sup); pan3.add(qt); eg.addActionListener(this); qt.addActionListener(this); af.addActionListener(this); back.addActionListener(this); ff.addActionListener(this); mod.addActionListener(this); sup.addActionListener(this); add(pan1,BorderLayout.CENTER); add(pan2,BorderLayout.EAST); add(pan3,BorderLayout.SOUTH); setBounds(300,300,600,200); setTitle("Les Interventions"); setVisible(true); num=-1; } public void actionPerformed(ActionEvent e) { if (e.getSource()==eg) { chid_intervention.setEditable(true); int vid_intervention=Integer.parseInt(chid_intervention.getText()); String vnom_intervention=chnom_intervention.getText(); int vid_equipement=Integer.parseInt(chid_equipement.getText()); String vdate_deb=chdate_deb.getText(); String vdate_fin=chdate_fin.getText(); String vtype_intervention=chtype_intervention.getText(); String vdesc=chdesc.getText(); String vsuite=chsuite.getText(); Double vcout=Double.parseDouble(chcout.getText()); Interventions I = new Interventions(); I.setID_inter(vid_intervention); I.setNOM_inter(vnom_intervention); I.setID_equi(vid_equipement); I.setDATE_deb(vdate_deb); I.setDATE_fin(vdate_fin); I.setTYPE_inter(vtype_intervention); I.setDesc(vdesc); I.setSuite(vsuite); I.setCout(vcout); clibd.ajouterInterv(I); chid_intervention.setText(""); chnom_intervention.setText(""); chid_equipement.setText(""); chdate_deb.setText(""); chdate_fin.setText(""); chtype_intervention.setText(""); chdesc.setText(""); chsuite.setText(""); chcout.setText(""); JOptionPane.showMessageDialog(null,"Ajout de l'Intervention effectue dans la base!!! "); } else if (e.getSource()==qt) { dispose(); clibd.fermer(); new MenuGeneral(); //System.exit(0); } else if (e.getSource()==af) { dispose(); new ListeInterv(); } else if (e.getSource()==back) { chid_intervention.setEditable(false); back.setEnabled(true); ff.setEnabled(true); liste=clibd.obtenirInterv(); num--; if (num<0) { JOptionPane.showMessageDialog(null,"debut de liste!!!"); chid_intervention.setText(""); chnom_intervention.setText(""); chid_equipement.setText(""); chdate_deb.setText(""); chdate_fin.setText(""); chtype_intervention.setText(""); chdesc.setText(""); chsuite.setText(""); chcout.setText(""); num=-1; back.setEnabled(false); chid_intervention.setEditable(true); } else { Interventions i =(Interventions) liste.get(num); chid_intervention.setText(Integer.toString(i.getID_inter())); chnom_intervention.setText(i.getNOM_inter()); chid_equipement.setText(Integer.toString(i.getID_equi())); chdate_deb.setText(i.getDATE_deb().toString()); chdate_fin.setText(i.getDATE_fin().toString()); chtype_intervention.setText(i.getTYPE_inter()); chdesc.setText(i.getDesc()); chsuite.setText(i.getSuite()); chcout.setText(Double.toString(i.getCout())); } } else if (e.getSource()==ff) { chid_intervention.setEditable(false); back.setEnabled(true); ff.setEnabled(true); liste=clibd.obtenirInterv(); num++; if (num>liste.size()-1) { JOptionPane.showMessageDialog(null,"Fin de liste !!!"); num=liste.size(); chid_intervention.setText(""); chnom_intervention.setText(""); chid_equipement.setText(""); chdate_deb.setText(""); chdate_fin.setText(""); chtype_intervention.setText(""); chdesc.setText(""); chsuite.setText(""); chcout.setText(""); ff.setEnabled(false); chid_intervention.setEditable(true); } else { Interventions i =(Interventions) liste.get(num); chid_intervention.setText(Integer.toString(i.getID_inter())); chnom_intervention.setText(i.getNOM_inter()); chid_equipement.setText(Integer.toString(i.getID_equi())); chdate_deb.setText(i.getDATE_deb().toString()); chdate_fin.setText(i.getDATE_fin().toString()); chtype_intervention.setText(i.getTYPE_inter()); chdesc.setText(i.getDesc()); chsuite.setText(i.getSuite()); chcout.setText(Double.toString(i.getCout())); } } else if(e.getSource()==mod) { chid_intervention.setEditable(false); int vid_intervention=Integer.parseInt(chid_intervention.getText()); String vnom_intervention=chnom_intervention.getText(); int vid_equipement=Integer.parseInt(chid_equipement.getText()); String vdate_deb=chdate_deb.getText(); String vdate_fin=chdate_fin.getText(); String vtype_intervention=chtype_intervention.getText(); String vdesc=chdesc.getText(); String vsuite=chsuite.getText(); Double vcout=Double.parseDouble(chcout.getText()); Interventions I = new Interventions(); I.setID_inter(vid_intervention); I.setNOM_inter(vnom_intervention); I.setID_equi(vid_equipement); I.setDATE_deb(vdate_deb); I.setDATE_fin(vdate_fin); I.setTYPE_inter(vtype_intervention); I.setDesc(vdesc); I.setSuite(vsuite); I.setCout(vcout); clibd.modifierInterv(I); chid_intervention.setText(""); chnom_intervention.setText(""); chid_equipement.setText(""); chdate_deb.setText(""); chdate_fin.setText(""); chtype_intervention.setText(""); chdesc.setText(""); chsuite.setText(""); chcout.setText(""); chid_intervention.setEditable(true); JOptionPane.showMessageDialog(null,"Modification intervention effectuee dans la base!!! "); } else if (e.getSource()==sup) { char rep='n'; String texte; texte =JOptionPane.showInputDialog("Supprimer(o/n)?"); rep=texte.charAt(0); String vid_intervention=chid_intervention.getText(); if (rep=='o' || rep=='O') { clibd.supprimerInterv(vid_intervention); JOptionPane.showMessageDialog(null,"Intervention supprimee de la base !!!"); chid_intervention.setText(""); chnom_intervention.setText(""); chid_equipement.setText(""); chdate_deb.setText(""); chdate_fin.setText(""); chtype_intervention.setText(""); chdesc.setText(""); chsuite.setText(""); chcout.setText(""); chid_intervention.setEditable(true); } else JOptionPane.showMessageDialog(null,"Intervention non supprimee de la base"); } } }
déjà ça c'est pas bon, car une intervention ne se fait que sur un seul équipement !Code:list_equi.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
A part cela, je vois bien que list_equi est créé mais,
je ne vois aucun endroit où list_equi est rempli.
Il faut faire une requête, récupérer les valeurs dans un ArrayList et envoyer le tout dans la JList
selon la procédure que j'ai posté le 05/05/2011 10h46
si tu ne fais pas ce bout de programme, aucune chance la JList se charge miraculeusement ;)
OUI mais ce bout de code je le met ou???Citation:
Il faut faire une requête, récupérer les valeurs dans un ArrayList et envoyer le tout dans la JList
selon la procédure que j'ai posté le 05/05/2011 10h46
dans la classe ou j'ai fait la connection avec la base oubien?
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
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174 package modele; import java.sql.*; import javax.swing.*; import java.util.*; //Classe pour la connection avec la Base de Donnees!!! et la creation des Methodes public class AccesInterv { private Connection con=null; private PreparedStatement st=null; private ResultSet rs=null; private ResultSetMetaData meta=null; //connection avec la Base public AccesInterv() { try { Class.forName("com.mysql.jdbc.Driver"); con=DriverManager.getConnection("jdbc:mysql://localhost:3306/GestioNRJ","root","passer" ); } catch(ClassNotFoundException ex) { System.out.println(ex.getMessage()); } catch(SQLException ex) { System.out.println(ex.getMessage()); } } //Ajouter une intervention public void ajouterInterv(Interventions I) { try { st=con.prepareStatement("insert into interventions(id_intervention,nom_intervention,id_equipement,date_deb,date_fin,type_intervention,desc_intervention,suite_intervention,cout_intervention) values "+ "(?,?,?,?,?,?,?,?,?)"); st.setInt(1,I.getID_inter()); st.setString(2,I.getNOM_inter()); st.setInt(3,I.getID_equi()); st.setString(4,I.getDATE_deb()); st.setString(5,I.getDATE_fin()); st.setString(6,I.getTYPE_inter()); st.setString(7,I.getDesc()); st.setString(8,I.getSuite()); st.setDouble(9,I.getCout()); st.executeUpdate(); } catch (SQLException ex) { System.out.println(ex.getMessage()); } } //Fermer la Fenetre public void fermer() { try { con.close(); } catch(Exception ex) { System.out.println(ex.getMessage()); } } public JTable obtenirListe() { JTable table=null; Vector <String> colonnes ; Vector <String> tuple; Vector <Vector> lignes; colonnes = new Vector <String> (); lignes = new Vector <Vector>(); try { st = con.prepareStatement("select * from interventions"); rs= st.executeQuery(); meta = rs.getMetaData(); int col = meta.getColumnCount(); for (int i=1;i<=col;i++) { colonnes.add(meta.getColumnLabel(i)); } while(rs.next()) { tuple = new Vector<String>(); for (int i=1;i<=col;i++) { String champ= rs.getString(i); tuple.add(champ); } lignes.add(tuple); } table = new JTable(lignes,colonnes); } catch(SQLException ex) { System.out.println(ex.getMessage()); } return table; } //Modifier un Fabricant public void modifierInterv(Interventions I) { try { st = con.prepareStatement("update interventions set nom_intervention=?,id_equipement=?,date_deb=?,date_fin=?,type_intervention=?,desc_intervention=?,suite_intervention=?,cout_intervention=? where id_intervention=?"); st.setInt(1,I.getID_inter()); st.setString(2,I.getNOM_inter()); st.setInt(3,I.getID_equi()); st.setString(4,I.getDATE_deb()); st.setString(5,I.getDATE_fin()); st.setString(6,I.getTYPE_inter()); st.setString(7,I.getDesc()); st.setString(8,I.getSuite()); st.setDouble(9,I.getCout()); st.executeUpdate(); } catch(SQLException ex) { System.out.println(ex.getMessage()); } } //Supprimer un Fabricant public void supprimerInterv(String vid_intervention) { try { st=con.prepareStatement("delete from interventions where id_intervention=?"); st.setString(1,vid_intervention); st.executeUpdate(); } catch(SQLException ex) { System.out.println(ex.getMessage()); } } //Afficher la Liste des Fabricants public ArrayList obtenirInterv() { ArrayList liste=new ArrayList(); try { st = con.prepareStatement("select * from interventions"); rs=st.executeQuery(); while(rs.next()) { Interventions I = new Interventions(); I.setID_inter(rs.getInt("id_intervention")); I.setNOM_inter(rs.getString("nom_intervention")); I.setID_equi(rs.getInt("id_equipement")); I.setDATE_deb(rs.getString("date_deb")); I.setDATE_fin(rs.getString("date_fin")); I.setTYPE_inter(rs.getString("type_intervention")); I.setDesc(rs.getString("desc_intervention")); I.setSuite(rs.getString("suite_intervention")); I.setCout(rs.getDouble("cout_intervention")); liste.add(I); } } catch(SQLException ex) { System.out.println(ex.getMessage()); } return liste; } }
Il n'y a pas de règle.
Tu pourrais tout mettre dans la classe JFrame,
Tu pourrais le mettre aussi dans la classe où tu fais la connexion ... (mauvaise idée)
etc ...
Pour avancer, je te proposes de faire une classe List_equi qui étend la classe JList.
Dans le constructeur, tu mets tout le code (requête, remplissage, ...)
ensuite dans ta classe FenInterv
à la ligne 11 :à la ligne 41 :Code:private List_equi list_equi;
Code:list_equi=new List_equi()
Sa avance pas de mon coté;
voici la classe List_equi:
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
48
49 package controleur; import java.sql.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import modele.*; public class List_equi extends JList{ private Connection con=null; private PreparedStatement st=null; private ResultSet rs=null; public List_equi(){ try { Class.forName("com.mysql.jdbc.Driver"); con=DriverManager.getConnection("jdbc:mysql://localhost:3306/GestioNRJ","root","passer" ); } catch(ClassNotFoundException ex) { System.out.println(ex.getMessage()); } catch(SQLException ex) { System.out.println(ex.getMessage()); } } public JList Liste() { JList List=null; try { st = con.prepareStatement("select id_equipement,nom_equipement from equipement"); rs= st.executeQuery(); } catch(SQLException ex) { System.out.println(ex.getMessage()); } return List; } }
mais si, mais si ... pas vite d'accord, mais quand même
1) tu es d'accord qu'après leIl y a dans le ResultSet rs la liste de tes équipements.Code:rs= st.executeQuery();
pour chaque enregistrements, tu crées un objet de ta classe
que tu stockes dans un ArrayList
2) tu remplis ta JList avec l'ArrayList transformée en tableau d'objet (méthode toArray())
3) vérifie que dans ta classe Equipement tu as bien ajouté
Code:
1
2
3 public String toString(){ return getNom_equi(); }
J'ai bien le code dans la classe Equipement mais je vois pas comment l'utiliser dans la classe List_equi....
et puis sa s'affiche toujours pas
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 public JList Liste() { ArrayList liste=new ArrayList(); JList List=null; try { st = con.prepareStatement("select id_equipement,nom_equipement from equipement"); rs= st.executeQuery(); while(rs.next()){ Equipement E=new Equipement(); E.setID_Equi(rs.getInt("id_equipement")); E.setNom_equi(rs.getString("nom_equipement")); liste.add(E); } List=new JList(liste.toArray()); } catch(SQLException ex) { System.out.println(ex.getMessage()); } return List; } }