Bonjour,
Je suis entrain de créer une interface dynamique en Java, c'est-à-dire que si on change les paramètres tous les éléments du JFrame changent aussi avec les événements.
Quelqu'un peut m'aider SVP!![]()
Bonjour,
Je suis entrain de créer une interface dynamique en Java, c'est-à-dire que si on change les paramètres tous les éléments du JFrame changent aussi avec les événements.
Quelqu'un peut m'aider SVP!![]()
Salut,
Bien sûr : ce forum est là pour aider tous ceux qui en ont besoin. Pose des questions précises et détaillées, et on verra si on peut te répondre.
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Oui mais là c'est carrément vague : c'est la description d'un peu près toutes les applications SWING qui se connectent à une base de données. Il va falloir être plus circonstancié. Quels problèmes rencontre-tu pour faire ça ? Où est la notion de dynamique ? As-tu besoin de générer 3000 formulaires automatiquement, ou tu as 3 objets dans ta base et tu veux faire trois formulaires qui s'affichent alternativement selon l'objet que tu veux modifier ou créer ? Tu cherches à faire quel type de présentation (en table, en arbre, etc.) ? Quelle est la dynamique générale de l'application (une simple frame avec tout en boutons, une frame avec des menus ou une frame muitidocument (internal frame)...
Si c'est simplement que te ne sais absolument pas comment faire d'interface SWING ou échanger avec un base de données, il faut te tourner vers des tutoriels. Voir en particulier JDBC pour l'aspect base de données.
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Le problème c'est que je n'arrive pas à vider les champs que j'ai créer dynamiquement avec un bouton nommé Reset
voici les codes :
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
85
86
87
88
89
90
91
92
93 package projet1; /** * @(#)Formulaire.java * * * * */ import javax.swing.JPanel; import javax.swing.BoxLayout; import javax.swing.JLabel; import java.awt.Dimension; import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.text.JTextComponent; public class Formulaire extends JPanel{ private String name; public Formulaire(String n) { setBorder(BorderFactory.createTitledBorder(name= n)); setLayout(new BoxLayout(this,BoxLayout.Y_AXIS)); } public Formulaire() { setBorder(BorderFactory.createEtchedBorder()); setLayout(new BoxLayout(this,BoxLayout.Y_AXIS)); } public void add(String label,String x,String[] strings,String obli){ add(new ZoneSesieEtiquete(label,x,strings,obli)); } public int synchronZones(){ int max = 0; for (int i = 0; i<getComponentCount(); i++) { int l = ((ZoneSesieEtiquete)this.getComponent(i)).getLabelText().length(); max = max>l?max:l; } for (int i = 0; i<getComponentCount(); i++) ((ZoneSesieEtiquete)this.getComponent(i)).setLabelPreferedSize(new Dimension(max*7,20)); return max; } public void setTextCompenentAt(JTextComponent t,int i){ if(i<getComponentCount()) ((ZoneSesieEtiquete)this.getComponent(i)).setTextComponent(t); } public void setLabelAt(JLabel l,int i){ if(i<getComponentCount()) ((ZoneSesieEtiquete)this.getComponent(i)).setlabel(l); } public void setLabelTextAt(String s,int i){ if(i<getComponentCount()) ((ZoneSesieEtiquete)this.getComponent(i)).setLabelText(s); } public String getLabelTextAt(int i){ return ((ZoneSesieEtiquete)this.getComponent(i)).getLabelText(); } public void setTextAt(String s,int i){ if(i<getComponentCount()) ((ZoneSesieEtiquete)this.getComponent(i)).settext(s); } public String getTextAt(int i){ return ((ZoneSesieEtiquete)this.getComponent(i)).getText(); } public String getTextAt(String s){ for (int i = 0; i<getComponentCount(); i++) if(((ZoneSesieEtiquete)this.getComponent(i)).getLabelText().equals(s))return getTextAt(i); return null; } public void setTextAt(String text,String labelName){ for (int i = 0; i<getComponentCount(); i++) if(((ZoneSesieEtiquete)this.getComponent(i)).getLabelText().equals(labelName)){ ((ZoneSesieEtiquete)getComponent(i)).settext(text); return; } } public String getTextAt(JLabel l){ for (int i = 0; i<getComponentCount(); i++) if(((ZoneSesieEtiquete)this.getComponent(i)).equals(l))return getTextAt(i); return null; } public void getTextAt(String text,JLabel l){ for (int i = 0; i<getComponentCount(); i++) if(((ZoneSesieEtiquete)this.getComponent(i)).equals(l)){ ((ZoneSesieEtiquete)getComponent(i)).settext(text); return; } } }
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
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
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323 package projet1; /** * @(#)ZoneSesieEtiquete.java * * * * */ import java.awt.Color; import javax.swing.JPanel; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.text.JTextComponent; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Stack; import java.util.regex.Pattern; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFormattedTextField; import javax.swing.JOptionPane; import javax.swing.event.MouseInputListener; public class ZoneSesieEtiquete extends JPanel implements KeyListener { public static JTextComponent text; public JLabel label; public JButton button; public static JTextField field; public static JFormattedTextField field1 = new JFormattedTextField(); public static JComboBox box; public Va vi = new Va(); public String l; String t; public static String ses; public static String co; private static final Pattern PATTERN_STRING = Pattern.compile("[0-9_(\\\\[,.;*%:!$£=+)°@µ|(())#&]\\\\*)?]+"); private static boolean isIntegerRegEx(String val) { return PATTERN_STRING.matcher(val).find(); } public ZoneSesieEtiquete() { } public ZoneSesieEtiquete(String l, String t, String[] v_combo, String obligatoire) { ((FlowLayout) getLayout()).setAlignment(0); if ("JTextField".equals(t)) { int i = 20; field = new JTextField(i); add(label = new JLabel(l)); add(new JLabel(": ")); add(text = field); field.setName(l); ses = field.getText(); field.setBackground(Color.white); TextEcout ctrlSaisie = new TextEcout(); // Définition du FocusListener qui sera attaché à la JTextField field.addFocusListener(ctrlSaisie); if ("Oui".equals(obligatoire)) { field.addKeyListener(this); Valid v = new Valid(); field.addFocusListener(v); } } if ("JFormattedTextField".equals(t)) { int i = 10; DateFormat format = new SimpleDateFormat("dd/MM/yyyy"); field1 = new JFormattedTextField(format); field1.setText("dd/MM/yyyy"); add(label = new JLabel(l)); add(new JLabel(": ")); add(text = field1); field1.setName(l); field1.setBackground(Color.white); TextEcout ctrlSaisie = new TextEcout(); // Définition du FocusListener qui sera attaché à la JTextField field1.addFocusListener(ctrlSaisie); if ("Oui".equals(obligatoire)) { field1.addKeyListener(this); Valid v = new Valid(); field1.addFocusListener(v); } } if ("JButton".equals(t)) { button = new JButton(l); button.addMouseListener(new MouseInputListener() { @Override public void mouseClicked(MouseEvent e) { ZoneSesieEtiquete.field.setText(null); ZoneSesieEtiquete.box.setSelectedItem(null); ZoneSesieEtiquete.field1.setText(null); ZoneSesieEtiquete.text.removeAll(); } @Override public void mousePressed(MouseEvent e) { // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void mouseReleased(MouseEvent e) { // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void mouseEntered(MouseEvent e) { // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void mouseExited(MouseEvent e) { // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void mouseDragged(MouseEvent e) { //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void mouseMoved(MouseEvent e) { //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } }); add(button); } if ("JComboBox".equals(t)) { String[] tab = {"Option 1", "Option 2", "Option 3", "Option 4"}; box = new JComboBox(v_combo); add(label = new JLabel(l)); add(new JLabel(": ")); add(box); co = box.getSelectedItem().toString(); ComboxEve ctrlSaisie = new ComboxEve(); box.addFocusListener(ctrlSaisie); } } @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { Object Donnees = e.getSource(); // On récupère l'objet appelant JTextField champ = (JTextField) Donnees; String teste = champ.getText(); if (isIntegerRegEx(teste) == true) { champ.setText(null); } else { String rec_nom = champ.getText().toUpperCase(); champ.setText(rec_nom); } } private class TextEcout implements FocusListener { @Override public void focusLost(FocusEvent e) { Object Donnees = e.getSource(); // On récupère l'objet appelant JTextField champ = (JTextField) Donnees; // On le caste en JTextField champ.setBackground(Color.white); e.setSource(champ); } @Override public void focusGained(FocusEvent e) { Object Donnees = e.getSource(); // On récupère l'objet appelant JTextField champ = (JTextField) Donnees; champ.setBackground(Color.yellow); e.setSource(champ); } } private class Valid implements FocusListener { @Override public void focusLost(FocusEvent e) { Object Donnees = e.getSource(); // On récupère l'objet appelant JTextField champ = (JTextField) Donnees; // On le caste en JTextField if ("".equals(champ.getText())) { JOptionPane.showMessageDialog(null, "Champ " + champ.getName() + " obligatoire"); } } @Override public void focusGained(FocusEvent e) { Object Donnees = e.getSource(); // On récupère l'objet appelant JTextField champ = (JTextField) Donnees; champ.setBackground(Color.yellow); e.setSource(champ); } } private class ComboxEve implements FocusListener { public void focusLost(FocusEvent e) { Object Donnees = e.getSource(); // On récupère l'objet appelant JComboBox champ = (JComboBox) Donnees; // On le caste en JTextField champ.setBackground(Color.white); e.setSource(champ); } public void focusGained(FocusEvent e) { Object Donnees = e.getSource(); // On récupère l'objet appelant JComboBox champ = (JComboBox) Donnees; // On le caste en JTextField champ.setBackground(Color.yellow); e.setSource(champ); } } public String getText() { return text.getText(); } public void settext(String s) { text.setText(s); } public String getLabelText() { return label.getText(); } public void setLabelText(String s) { label.setText(s); } public void setlabel(JLabel l) { remove(label); add(label = l, 0); } public void setTextComponent(JTextComponent t) { remove(text); add(text = t); } public void setLabelPreferedSize(Dimension d) { label.setPreferredSize(d); } public JButton getButton() { return button; } public void setButton(JButton button) { this.button = button; } public JTextField getField() { return field; } public void setField(JTextField field) { this.field = field; } public JLabel getLabel() { return label; } public void setLabel(JLabel label) { this.label = label; } public String getT() { return t; } public void setT(String t) { this.t = t; } public String getSes() { return ses; } public void setSes(String ses) { this.ses = ses; } }
Enfin :
Mon problème est ici ;quand je clique sur le bouton reset
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
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 package projet1; /** * @(#)TestFormulaire.java * * * * */ import connexion.ConnexionBase; import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.FlowLayout; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.Stack; import javax.swing.JButton; import javax.swing.JTextField; public class TestFormulaire extends JFrame { private Formulaire f; public TestFormulaire() { setTitle("Formulaire Personnnel"); f = new Formulaire(); //Reccupération dans la base try { Statement st = ConnexionBase.getInstance().createStatement(); ResultSet result1 = st.executeQuery("SELECT * FROM champs order by num"); while (result1.next()) { String lib = result1.getString("libelle"); String ty = result1.getString("type"); String li = result1.getString("num"); int lo = result1.getInt("longueur"); String ca = result1.getString("cases"); String ob = result1.getString("obligatoire"); //Sous Requête ArrayList al = new ArrayList(); al = Reccupcontenu(lib); String[] mylist = new String[al.size()]; mylist = (String[]) al.toArray(mylist); f.add(lib, ty, mylist, ob); } } catch (Exception e) { System.out.println(e); } //Boucle pour afficher les Jlabel et le JTexField // f.add("charif", 15); /* f.add("c",15); f.add("charifkjbhkdjshkjhskj",15); f.add("cha",15); f.add("rdem",50); f.synchronZones();*/ /* f.setTextAt("howa",0); f.setTextAt("hadak","c"); f.setTextAt(f.getTextAt(f.getLabelTextAt(0)),f.getLabelTextAt(2)); */ ((JPanel) getContentPane()).setLayout(new FlowLayout()); ((JPanel) getContentPane()).add(f); pack(); setDefaultCloseOperation(DISPOSE_ON_CLOSE); setResizable(false); setVisible(true); } public static ArrayList<String> Reccupcontenu(String f) { ArrayList<String> str = new ArrayList<String>(); try { Statement st2 = ConnexionBase.getInstance().createStatement(); ResultSet result2 = st2.executeQuery("SELECT contenu FROM liste where libelle='" + f + "'"); int i = 0; while (result2.next()) { String x = result2.getString("contenu"); str.add(x); } } catch (Exception e) { } return str; } /** * @param args the command line arguments */ public static void main(String[] args) { new TestFormulaire(); } }
seulement le dernier champ sera vider; alors que je veux tout les champs créer dynamiquement à partir du boucle serons vider aussi
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 ... button = new JButton(l); button.addMouseListener(new MouseInputListener() { @Override public void mouseClicked(MouseEvent e) { ZoneSesieEtiquete.field.setText(null); ZoneSesieEtiquete.box.setSelectedItem(null); ZoneSesieEtiquete.field1.setText(null); } ... add(button);
Je vois :
- Déjà, ne pas utiliser de champs static : ils sont partagés entre toutes les instances (si tu as 2 zonesaisies qui ont un JTextField, c'est le même (alors peut-être qu'au moment de la création de l'interface tu en mettras bien 2 différents dans la fenêtre, mais à la sauvegarde, ce n'a n'en sera plus qu'un et tu sauvegarderas la même information dans 2 champs
- N'utilise pas de champs public : ça te semble plus pratique pour faire les manipulations, mais ça te limite pour le modèle objet et ça favorise les erreurs de manipulation
Je ne vais pas tout reprendre ce que tu as fait mais vais te donner un exemple simplifié pour te donner le principe. Donc, je résume ce que tu veux faire : tu veux pouvoir générer dynamiquement des formulaires pour modifier tes objets. Pour cela tu as fait une classe qui représente un champ standard, qui te permet de gérer plusieurs types de champs.
2 approches possibles :
- La tienne, qui consiste à avoir une seule classe ZoneSaisieEtiquette, avec un ou plusieurs constructeurs, pour créer des champs différents (avec JTextField, combo, etc)
C'est une façon de faire. Mais pour la sauvegarde, ajoute une méthode qui fait la sauvegarde, en fonction des paramètres de la classe.
Un formulaire sera en gros une liste de ZoneSaisieEdiquette, que tu n'auras qu'à parcourir en appelant à chaque fois la méthode de sauvegarde, pour faire la sauvegarde globale- L'autre solution est de faire une arborescence de classe, avec une classe abstraite qui contient tout le standard d'un ZoneSaisieEtiquette quelqocnque, sans se préoccuper du type de champs, et une implémentation concrète par type de champ, ce qui te permet d'être beaucoup plus générique et souple
La sauvegarde se fait sur le même principe que la 1)
Je peux te faire un exemple simplifiée si tu ne visualises pas concrètement ce que je veux dire.
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Partager