IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Agents de placement/Fenêtres Java Discussion :

Dédoublement du code d'une fenêtre


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Par défaut Dédoublement du code d'une fenêtre
    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

    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;
    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
    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());
                    ...
    ici j'ai mis extends JPanel et non JFrame, j'espère que sa change rien ...


    Merci d'avance à tous

    et à bientôt

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    La méthode dispose() libère uniquement les ressources natives associé à l'affichage de la fenêtre.

    A la vue de ton code tu ne crée pas une nouvelle fenêtre mais tu modifies une fenêtre déjà créé. Tu l'initialises où fenFournisseur ?


    Je dirais que tu fais des économies de bout de chandelles en conservant la référence de ta fenêtre. Du coup certaines instructions s'empile (l'ajout de listener par exemple).



    a++

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Par défaut
    Merci de cette réponse rapide,

    l'initialisation des données me permettrai d'avoir un formulaire tout neuf, mais cela n'empêchera pas les listeners de s'empiler (m'enfin je pense),

    mais d'après ce que j'ai compris à travers ton message, il suffirai que je libère "la référence de la fenêtre". suite à quelque recherche antérieur il suffirait que je passe la référence de l'objet fenFournisseur à null. Je me trompe ?

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Tutu46 Voir le message
    mais cela n'empêchera pas les listeners de s'empiler (m'enfin je pense),
    Ben si tu crées une nouvelle fenêtre tu es sûr qu'il ne comportera aucun listener...

    Citation Envoyé par Tutu46 Voir le message
    il suffirait que je passe la référence de l'objet fenFournisseur à null. Je me trompe ?
    Oui, et recréer une nouvelle fenêtre via un new.
    Ou mieux : éviter de conserver la référence de la fenêtre. Dans bien des cas c'est totalement inutile...


    a++

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Par défaut
    Re-Bonjour,

    donc j'ai essayé de suivre vos conseille, j'initialise la Jframe dans le case

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    			case 3 :
    				fenChantier = new JFrame();
    				fenChantier.setTitle("Saisie du Chantier");
    				fenChantier.setResizable(false);
    				fenChantier.setLayout(new FlowLayout());
    				fenChantier.setContentPane(new SaisieChantier());
    				fenChantier.setSize(2400, 2400);
    				fenChantier.addWindowListener(new GestionnaireFen2());
    				fenChantier.pack();
    				fenChantier.setLocation(
    						(screen.width / 2 - fenChantier.getSize().width / 2),
    						(screen.height / 2 - fenChantier.getSize().height / 2));
    				fenChantier.setVisible(true);
    			break;
    et puis j'ai essayé d'enlever le référencement lorsque je quitte la fenêtre en faisant

    GestionFenetre.fenChantier = null ;

    je ne sais pas du tout comment on retire le référencement d'une JFrame, je pense que c'est comme cela

    en faisant c'est deux opération cela ne marche pas, suis-je sur la bonne voix pour autant ?

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Par défaut
    Je me suis trop emballé, je n'ai rien supprimer du tout, le problème est toujours là

    mais j'ai deux questions ...

    1) le fait que j'ai fait un extends JPanel (au lieu de JFrame) dans la classe de la fenêtre change t'il quelque chose ?

    2) j'utilise une fenêtre de confirmation, ayant beaucoup de fenêtre, elle est utiliser pour toute les fenêtre de saisie . Elle est composé d'une variable static JFrame permettant d'identifier et fermer la bonne fenêtre, cela peux créer des problème si j'utilise la Jframe à partir de la variable static

    merci d'avance

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Par défaut
    Bonne nouvelle,

    j'arrive enfin à plus avoir ce problème de dédoublement de fenêtre, (je sais pas exactement comment j'ai fait ... mais je les fais ) maintenant j'ai d'autre problème mais la je pense pas que quelqu'un puisse m'aider ^^

    merci beaucoup en tout cas de m'avoir apporté cette aide précieuse

    A Bientot

    Merci encor

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/02/2011, 16h04
  2. Réponses: 12
    Dernier message: 15/06/2009, 10h35
  3. Code pour imprimer une fentre
    Par darkman13130 dans le forum C++Builder
    Réponses: 3
    Dernier message: 18/09/2008, 15h26
  4. Insertion d'une fenêtre de code dans un post
    Par Momo46 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 4
    Dernier message: 18/11/2006, 22h23
  5. comment fermer une fenêtre modale avec le code
    Par Sheriff dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 16/10/2006, 16h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo