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

AWT/Swing Java Discussion :

[Débutant] Unicité d'une JInternalFrame


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par défaut [Débutant] Unicité d'une JInternalFrame
    Bonjour,

    Ma question est toute bête.

    Au sein d'un JDesktopPane, je dois pouvoir ouvrir une JInternalFrame qui représente une fiche de clients.

    Je voudrais savoir, de façon générale, comment faire pour ne créer qu'une et une seule fenêtre.
    Càd quand l'utilisateur ferme cette fenêtre et puis la ré-ouvre, ou alors quand il essaie de l'ouvrir alors qu'elle est déjà affichée dans le JDesktopPane, je voudrais toujours que ce soit la même JInternalFrame qui apparaisse.


    Dois-je faire un singleton ?

    Dois-je juste jouer sur l'affichage setVisible(true/false) ?

    Si vous avez un ptit exemple sympa, je suis preneur !

  2. #2
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Citation Envoyé par calogerogigante


    Dois-je faire un singleton ?

    Dois-je juste jouer sur l'affichage setVisible(true/false) ?
    moi j'aurais opté pour les deux.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  3. #3
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par défaut
    Merci pour ta réponse.

    Et est-ce que ça veut dire que je dois mettre un listener sur la petite croix, et y relier une fonction qui cache la JInternalFrame dans le WindowsClosingEvent ?

    Je vais faire un test en modèle réduit !!

  4. #4
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par défaut
    Voilà, j'ai fait un exemple complet, en m'inspirant des tutoriels de Sun.

    Mais j'ai un petit problème : il refuse de ré-afficher la fenêtre
    , après l'avoir cachée, pourquoi ?

    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
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
     
    public class UniqueInternalFrameDemo extends JFrame
                 implements InternalFrameListener,
                            ActionListener
    {
    JDesktopPane jdp = new JDesktopPane();
    JInternalFrame fenetreUnique;
    JLabel info = new JLabel(" ");
     
        public UniqueInternalFrameDemo(String title)
        {
            super(title);
     
            //Set up the GUI.
            Container cont = getContentPane();
     
            JButton bout = new JButton("Afficher la JInternalFrame");
            bout.addActionListener(this);
     
            cont.add(bout, BorderLayout.NORTH);
     
            jdp.putClientProperty("JDesktopPane.dragMode", "outline");
            cont.add(jdp, BorderLayout.CENTER);
            cont.add(info, BorderLayout.SOUTH);
            setVisible(true);
        }
     
        public void internalFrameClosing(InternalFrameEvent e) {
        }
     
        public void internalFrameClosed(InternalFrameEvent e) {
          fenetreUnique.setVisible(false);
          info.setText("On a caché la fenêtre");
        }
     
        public void internalFrameOpened(InternalFrameEvent e) {
        }
     
        public void internalFrameIconified(InternalFrameEvent e) {
        }
     
        public void internalFrameDeiconified(InternalFrameEvent e) {
        }
     
        public void internalFrameActivated(InternalFrameEvent e) {
        }
     
        public void internalFrameDeactivated(InternalFrameEvent e) {
        }
     
     
     
        public void actionPerformed(ActionEvent e)
        {
          System.out.println("Clic sur bouton");
          if (fenetreUnique == null)
            {
            fenetreUnique = new JInternalFrame("Fiche Client",
                                true,  //resizable
                                true,  //closable
                                true,  //maximizable
                                true); //iconifiable
            fenetreUnique.addInternalFrameListener(this);
            fenetreUnique.setSize(200, 150);
            jdp.add(fenetreUnique);
            fenetreUnique.setVisible(true);
     
            info.setText("On crée la fenêtre");
            }
          else {
               fenetreUnique.setVisible(true);
               info.setText("On ré-affiche la fenêtre");
               }
        }
     
        /**
         * Create the GUI and show it.  For thread safety,
         * this method should be invoked from the
         * event-dispatching thread.
         */
        private static void createAndShowGUI()
        {
            //Create and set up the window.
            JFrame frame = new UniqueInternalFrameDemo("Unique JInternalFrame");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //Display the window.
            frame.setSize(700, 500);
            frame.setVisible(true);
        }
     
        public static void main(String[] args)
        {
            try {
                UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
                }
            catch (Exception e) { }
     
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run()
                {
                    createAndShowGUI();
                }
            });
        }
    }
    C'est comme si le "setVisible" du else {...} :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
           else {
               fenetreUnique.setVisible(true);
               info.setText("On ré-affiche la fenêtre");
               }
    ne suffisait pas...
    Parce que le JLabel info, lui, est bien mis à jour avec le message "On ré-affiche la fenêtre" !!

  5. #5
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Et en faisant setDefaultCloseOperation(HIDE_ON_CLOSE); ?
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  6. #6
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par défaut
    Merci Xavier l'ours !!

    Ca marche en effet : voici la méthode actionperformed complète modifiée :

    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
        public void actionPerformed(ActionEvent e)
        {
          System.out.println("Clic sur bouton");
          if (fenetreUnique == null)
            {
            fenetreUnique = new JInternalFrame("Fiche Client",
                                true,  //resizable
                                true,  //closable
                                true,  //maximizable
                                true); //iconifiable
            fenetreUnique.addInternalFrameListener(this);
            fenetreUnique.setSize(200, 150);
            fenetreUnique.setDefaultCloseOperation(JInternalFrame.HIDE_ON_CLOSE);
            jdp.add(fenetreUnique);
            fenetreUnique.setVisible(true);
    
            info.setText("On crée la fenêtre");
            }
          else {
               fenetreUnique.setVisible(true);
               info.setText("On ré-affiche la fenêtre");
               }
        }

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

Discussions similaires

  1. Comment ajouter une icone à une JInternalFrame
    Par wassimb dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 12/07/2006, 15h13
  2. [Débutant] Affichage d'une grille
    Par Mathieu.J dans le forum OpenGL
    Réponses: 25
    Dernier message: 13/06/2004, 19h38
  3. [débutant]Faire appel à une action d'une ActionList
    Par petitours dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/03/2004, 22h53
  4. [Débutant] Connexion sur une machine distante protégée
    Par arthix dans le forum Développement
    Réponses: 3
    Dernier message: 28/08/2003, 09h46
  5. [débutant][xsl]incrémenter une variable
    Par guitalca dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 01/04/2003, 15h19

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