Bonjour a tous,
Je suis actuellement en train d'essayer de créer un logiciel, cependant j'ai un soucis qui perdure depuis un petit moment et là, je ne voix plus quoi faire
pour se mettre dans le contexte, j'ai une fenêtre "menu" où sont disposés plusieurs boutons permettant d'accéder à une page chacun.
dans quelques unes de ces pages, le logiciel présente un formulaire. l'utilisateur inscrit les données qu'il souhaite, ces données seront ensuite écrite dans une base de donnée (PostGr).
Jusqu'à là tout se passe pour le mieux, mais lorsqu'on quitte la fenêtre pour la ré-ouvrir par la suite et qu'on valide un nouveaux formulaire, il y a une erreur car le logiciel à essayé de rentrer les données deux fois dans la base(une fois par ouverture).
après quelque recherche j'ai vue que cela est du parce qu'un fenetre.dispose() ne ferme pas la fenêtre mais la cache. Pour palier à se problème j'ai d'abord essayer de faire un singleton pattern. J'ai pas exactement compris comment cela marchais.
Ensuite j'ai vue que la fonction setDefaultCloseOperation(DISPOSE_ON_CLOSE) fait fermer la fenêtre, et les donnèes qui vont avec, mais cela ne marche toujours pas.
Et enfin en essayant de bidouiller un peu, j'ai créer une variable statique booléenne "ouvert" qui est initialisé à false.
l'utilisateur demande (la page 6 par exemple), le logiciel vérifie si fenetre6.ouvert et a false, si oui il appelle la classe Fen6 qui construira la fenêtre et mettra ouvert à true.
si la fenetre6.ouvert est à true , le logiciel appellera la méthode fenetre6.setVisible(true).
et bien sur je mets fenetre6.setVisible à false quand je ferme la fenêtre....
malheureusement là aussi, le code ce dédouble a chaque réouverture
La manière que j'ai réalisé le logiciel
une classe gestionFenetre qui appelle les autres fenetre de cet manière
et la classe SaisieFournisseur() commence comme sa
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 case 4: fenFournisseur.setTitle("Saisie des fournisseur"); fenFournisseur.setResizable(false); fenFournisseur.setLayout(new FlowLayout()); fenFournisseur.setContentPane(new SaisieFournisseur()); fenFournisseur.setSize(2400, 2400); fenFournisseur.addWindowListener(new GestionnaireFen2()); fenFournisseur.pack(); fenFournisseur.setLocation( (screen.width / 2 - fenFournisseur.getSize().width / 2), (screen.height / 2 - fenFournisseur.getSize().height / 2)); fenFournisseur.setVisible(true); break;
ici j'ai mis extends JPanel et non JFrame, j'espère que sa change rien ...
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 import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; public class RechercheFournisseur extends JPanel { JCheckBox repCheque = new JCheckBox("Chèque"); JCheckBox repLCR = new JCheckBox("LCR"); JCheckBox repVirement = new JCheckBox("Virement"); JCheckBox repPrelevement = new JCheckBox("Prélèvement"); JButton annuler = new JButton("Annuler"); JButton rechercher = new JButton("Rechercher"); JTextField repCode = new JTextField(); JTextField repNom = new JTextField(); JTextField repCP = new JTextField(); JTextField repVille = new JTextField(); JTextField repModePaiement = new JTextField(); JComboBox repDelaiPaiement = new JComboBox(); public RechercheFournisseur() { this.setLayout(new BorderLayout()); ...
Merci d'avance à tous
et à bientôt![]()
Partager