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étection de l'affichage d'une JFrame.


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de FredPsy
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Décembre 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 285
    Par défaut Détection de l'affichage d'une JFrame.
    Bonsoir,
    j'explique mon problème. J'ai un JFrame qui ne comporte que des boutons ayant pour but d'ouvrir d'autre JFrames. Un espèce de tableau de bord en fait.

    Lorsque je clique sur un bouton X, la JFrame X s'ouvre. Le soucis, c'est que si j'appui 10 fois sur le bouton X, j'aurai 10 fois la JFrame X d'ouverte.

    Ma question, c'est peut on savoir si une JFrame est déjà ouverte de façon à ce qu'elle ne se ré-ouvre pas au prochain clique ?

    J'ai essayé isShowing, isVisible, sans résultat, ou alors, j'ai mal fais.

    Merci.

    Un imprime écran vaut mieux que de longue explication.
    J'ai cliqué trois fois sur le premier bouton.


  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 919
    Billets dans le blog
    54
    Par défaut
    Tu a probablement un probleme de conception et de manipulation de variable. Peux-tu nous mettre du code s'il te plait ?

    Sinon un autre moyen de pallier a ce probleme est de desactiver le bouton et de ne le reactiver que quand la fenetre est fermee, empechant ainsi d'en creer d'autres.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre chevronné Avatar de FredPsy
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Décembre 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 285
    Par défaut
    En fait, pour la conception, je viens de commencer ce projet avec presque une année sans mettre les mains dans le Java. Et décidément, c'est pas comme le vélo, ça se perd.

    Pour ce qui est du code, il est sur mon autre PC, qui est éteint, donc je verais demain. Mais en gros :
    Mon bouton est dans un observateur d'événement et lorsque je cliques dessus, j'ai un morceau de code comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (e.getSource() == NomBouton)
    {
    /* Autre classe, fichier différent*/
    new AutreJFrame();// Pour l'exemple, j'ai mis AutreJFrame
    }
    Voilà.
    Sinon un autre moyen de pallier a ce probleme est de desactiver le bouton et de ne le reactiver que quand la fenetre est fermee, empechant ainsi d'en creer d'autres.
    Le problème sera le même, les deux JFrame sont indépendantes, donc il faut que je récupère l'état d'une des deux pour intéragir avec l'autre.

    En fait, non, je pourrais désactiver le bouton lors de l'ouverture de l'autre JFrame, mais à la fermeture de cette dernière, je ne sais pas comment réactiver le bouton.

  4. #4
    Membre chevronné Avatar de FredPsy
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Décembre 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 285
    Par défaut
    Je viens de refaire ça vite fait sur Eclipse.
    Mon premier fichier Boarding.java
    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 test.ihm;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.Rectangle;
     
    import javax.swing.SwingUtilities;
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import javax.swing.JButton;
     
     
    public class Boarding extends JFrame implements ActionListener {
     
        private static final long serialVersionUID = 1L;
     
        private JPanel jContentPane = null;
     
        private JButton Button = null;
     
        /**
         * This method initializes Button    
         *     
         * @return javax.swing.JButton    
         */
        private JButton getButton() {
            if (Button == null) {
                Button = new JButton("Ouvrir");
                Button.setBounds(new Rectangle(4, 4, 106, 37));
                Button.addActionListener(this);
            }
            return Button;
        }
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Raccord de méthode auto-généré
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    Boarding thisClass = new Boarding();
                    thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    thisClass.setVisible(true);
                }
            });
        }
     
        /**
         * This is the default constructor
         */
        public Boarding() {
            super();
            initialize();
        }
     
        /**
         * This method initializes this
         * 
         * @return void
         */
        private void initialize() {
            this.setSize(123, 80);
            this.setContentPane(getJContentPane());
            this.setTitle("Mainboard");
            this.setLocation(50, 50);
        }
     
        /**
         * This method initializes jContentPane
         * 
         * @return javax.swing.JPanel
         */
        private JPanel getJContentPane() {
            if (jContentPane == null) {
                jContentPane = new JPanel();
                jContentPane.setLayout(null);
                jContentPane.add(getButton(), null);
            }
            return jContentPane;
        }
     
        public void actionPerformed(ActionEvent e) {
            // TODO Raccord de méthode auto-généré
            if (e.getSource() == Button)
                {
                    new Ihm();
                }
     
        }
     
    }
    Le deuxième fichier Ihm.java (deuxième JFrame)
    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
     
    package test.ihm;
     
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import javax.swing.JButton;
    import java.awt.Rectangle;
     
    public class Ihm extends JFrame {
     
        private static final long serialVersionUID = 1L;
     
        private JPanel jContentPane = null;
     
        private JButton ButtonClose = null;
     
        /**
         * This is the default constructor
         */
        public Ihm() {
            super();
            initialize();
        }
     
        /**
         * This method initializes this
         * 
         * @return void
         */
        private void initialize() {
            this.setSize(300, 200);
            this.setContentPane(getJContentPane());
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setTitle("JFrame");
            this.setVisible(true);
            this.setLocation(150, 150);
        }
     
        /**
         * This method initializes jContentPane
         * 
         * @return javax.swing.JPanel
         */
        private JPanel getJContentPane() {
            if (jContentPane == null) {
                jContentPane = new JPanel();
                jContentPane.setLayout(null);
                jContentPane.add(getButtonClose(), null);
            }
            return jContentPane;
        }
     
        /**
         * This method initializes ButtonClose    
         *     
         * @return javax.swing.JButton    
         */
        private JButton getButtonClose() {
            if (ButtonClose == null) {
                ButtonClose = new JButton("Fermer");
                ButtonClose.setBounds(new Rectangle(195, 121, 75, 27));
                ButtonClose.addActionListener(new java.awt.event.ActionListener() {
                    public void actionPerformed(java.awt.event.ActionEvent e) {
                        Fermer();
                    }
                });
            }
            return ButtonClose;
        }
        public void Fermer()
        {
            this.setVisible(false);
        }
     
    }

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 919
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par FredPsy Voir le message
    En fait, non, je pourrais désactiver le bouton lors de l'ouverture de l'autre JFrame, mais à la fermeture de cette dernière, je ne sais pas comment réactiver le bouton.
    Avec un WindowListener place sur la nouvelle fenetre que tu viens d'ouvrir tout simplement. Dans ce cas meme plus besoin de garder une reference sur la nouvelle fenetre ouverte.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    Que tes fenêtres soient des singletons!!



    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
    public class Home extends JFrame {
      private JMenuBar menuBar;
      private JMenuItem communityMenuItem;
     
      private static Home instance;
      public static Home getInstance() {
        if (intance == null) {
          instance = new Home();
        }
      }
     
      private Home() {
        initComponents();
        ...
      }
     
      private void initComponents() {
        menu = new javax.swing.JMenuBar();
        ...
        communityMenuItem = new javax.swing.JMenuItem();
        ...
        communityMenuItem.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(java.awt.event.ActionEvent evt) {
            communityMenuItemActionPerformed(evt);
          }
        });
      }
     
      private void communityMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
        try {
          // Pour ouvrir une fenêtre JInternalFrame de type Community
          Community community = Community.getInstance();
          this.add(community);
          community.setVisible(true);
        } catch (PapoException pe) {
          pe.printStackTrace();
        }
      }
    ...
    }
    C'est beaucoup plus simple et tu n'as alors aucun contrôle du style "est-ce que la frame est déjà affiché ou pas?"

    TaFenetre.getInstance() au lieu new TaFenetre(), en créeant getInstance comme dans mon code.
    Le constructeur est private réservé à lui-même mais accessible par getInstance() qui va te retourner une instance de TaFenetre.

    De cette façon, tu n'as aucun truc à faire au niveau de tes boutons. TU auras beau cliquer dessus ce sera toujours la même interface qui apparaîtra, pas un clone ou une nouvelle instance, la MEME
    Après tu peux rajouter des comportements d'enfant unique à ta JFrame unique comme le fait de pouvoir se réinitialiser, de sauvegarder sa dernière position, etc...

    Désactiver un bouton pour éviter le "double" clic dessus, c'est souvent une rustine qu'il vaut mieux éviter à moins de ne pas avoir le choix!

  7. #7
    Membre chevronné Avatar de FredPsy
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Décembre 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 285
    Par défaut
    Bonjour,

    Désolé MickaelBW, mais là, je ne comprends strictement rien à ce que tu m'exposes.

    Tu pourrais me faire un exemple de code complet afin que je puisses l'étudier sans mettre trop de chose.

    Genre une JFrame avec un bouton, qui ouvre une autre JFrame (et non une JInternalFrame), sans plus.

    Merci Beaucoup.

    PS : J'étudie déjà ce que tu m'as envoyé.

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

Discussions similaires

  1. Problème d'affichage dans une JFrame
    Par farwest dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 06/01/2009, 18h52
  2. ajuster l'affichage dans une JFrame
    Par MeDReD dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 04/06/2008, 17h33
  3. [JFrame] Affichage d'une application toujours au premier plan
    Par michaeljeru dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 06/12/2006, 22h49
  4. Accélérer l'affichage d'une jframe
    Par debutant java dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 16/04/2005, 12h23
  5. [JFrame] affichage de component et d'image dans une JFrame
    Par Joeleclems dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 08/10/2004, 16h17

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