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étecter les JFrame affichées


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 164
    Par défaut Détecter les JFrame affichées
    Bonjour

    J'ai une applic avec une JFrame principale. De celle ci, j'ouvre d'autres JFrame mais je ne veux qu'un seul affichage de chaque. Suis-je bien clair ?

    Par exemple : Soit JFrame1 ma JFrame principale, JFrame2 une JFrame secondaire que je ne veux afficher qu'en 1 seul exemplaire.

    Lors d'une action (bouton ou autre) dans JFrame1, j'affiche JFrame2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new JFrame2().setVisible(true);
    Mon problème est que si je relance l'action dans JFrame1, une seconde JFrame2 s'affiche.
    Comment détecter depuis JFrame1 que JFrame2 est Visible

    Merci d'avance

    Pascal

  2. #2
    Membre confirmé Avatar de titus55
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 115
    Par défaut
    Bonjour,
    pour ton problème, je pense que tu peux soit déclarer un boolean que tu met a true par ex lorsque ta Frame2 est affichée, soit désactiver le bouton d'ouverture de la Frame2 une fois celle-ci affichée.

  3. #3
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut
    je risais pluto essayer de par faire le new dans le bouton ... mais peut etre précrée toute les fenêtres (ca doit pas etre optimal dans tout les cas) et le mettre a setVisble(false) puis juste joué sur ca ensuite .

    ou avoir ma JFrame2 dans une variable globale ... et crée que si celle ci est nulle ...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 164
    Par défaut
    Je voulai justement ne pas créer une variable public et ne pas créer toutes les JFrame au lancement pour éviter de charger le tout en mémoire si je ne les utilises pas.

    Je pense qu'il doit y avoir un moyen de listes les jframes (il y l'équivalent avec JInternalFrame dans JDesktopPane), mais je n'ai pas trouvé pour les JFrame.

  5. #5
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Pour faire propre tu dois avoir une classe non Graphique qui servira de controleur à tes différentes vues, c'est à dire les différentes JFrame.
    Ce controlleur aura les instances des différentes frame en tant qu'attribute, et possèdera les méthode pertmettant de les afficher, cacher.

    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
     
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.SwingUtilities;
     
    /*
     * Créé le 11 juil. 07
     *
     * Pour changer le modèle de ce fichier généré, allez à :
     * Fenêtre>Préférences>Java>Génération de code>Code et commentaires
     */
     
    /**
     * @author secabane
     *
     * Pour changer le modèle de ce commentaire de type généré, allez à :
     * Fenêtre>Préférences>Java>Génération de code>Code et commentaires
     */
    public class FrameController {
     
        private JFrame mainFrame;
        private JFrame f1,f2,f3;
     
        public FrameController() {
            mainFrame = new JFrame();
            mainFrame.addWindowListener(new WindowAdapter() {
                /* (non-Javadoc)
                 * @see java.awt.event.WindowAdapter#windowClosed(java.awt.event.WindowEvent)
                 */
                public void windowClosing(WindowEvent arg0) {
     
                    quit();
                }
     
     
            });
            JButton action1 = new JButton("afficher/fermer frame 1");
            action1.addActionListener(new ActionListener() {
     
                public void actionPerformed(ActionEvent arg0) {
                    toggleF1Visibility();        
                }
     
            });
            JButton action2 = new JButton("afficher/fermer frame 2");
            action2.addActionListener(new ActionListener() {
     
                public void actionPerformed(ActionEvent arg0) {
                    toggleF2Visibility();        
                }
     
            });
            JButton action3 = new JButton("afficher/fermer frame 3");
            action3.addActionListener(new ActionListener() {
     
                public void actionPerformed(ActionEvent arg0) {
                    toggleF3Visibility();        
                }
     
            });
            mainFrame.add(action1,BorderLayout.NORTH);
            mainFrame.add(action2,BorderLayout.CENTER);
            mainFrame.add(action3,BorderLayout.SOUTH);
     
     
            f1 = new JFrame("Frame 1");
            f1.setSize(100,75);
            f1.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
            f2 = new JFrame("Frame 2");
            f2.setSize(100,75);
            f2.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
            f3 = new JFrame("Frame 3");
            f3.setSize(100,75);
            f3.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
     
            SwingUtilities.invokeLater(new Runnable() {
     
                public void run() {
                    mainFrame.pack();
                    mainFrame.setLocationRelativeTo(null);
                    mainFrame.setVisible(true);                
                }
            });   
     
        }
     
        public void quit() {
            mainFrame.dispose();
            f1.dispose();
            f2.dispose();
            f3.dispose();
            //....
        }
     
        public void toggleF1Visibility() {
            SwingUtilities.invokeLater(new Runnable() {
     
                public void run() {
                    f1.setVisible(! f1.isVisible());
                }
            });
        }
     
        public void toggleF2Visibility() {
            SwingUtilities.invokeLater(new Runnable() {
     
                public void run() {
                    f2.setVisible(! f2.isVisible());
                }});
        }
     
        public void toggleF3Visibility() {
            SwingUtilities.invokeLater(new Runnable() {
     
                public void run() {
            f3.setVisible(! f3.isVisible());}});
        }
     
        public void showF1() {
            SwingUtilities.invokeLater(new Runnable() {
     
                public void run() {
            f1.setVisible(true);    
                }});    
        }
     
        public void hideF1() {
            SwingUtilities.invokeLater(new Runnable() {
     
                public void run() {
            f1.setVisible(false);
                }});        
        }
     
        public void showF2() {
            SwingUtilities.invokeLater(new Runnable() {
     
                public void run() {
            f2.setVisible(true);    
                }});    
        }
     
        public void hideF2() {
            SwingUtilities.invokeLater(new Runnable() {
     
                public void run() {
            f2.setVisible(false);    
                }});    
        }
     
        public void showF3() {
            SwingUtilities.invokeLater(new Runnable() {
     
                public void run() {
            f3.setVisible(true);    
                }});    
        }
     
        public void hideF3() {
            SwingUtilities.invokeLater(new Runnable() {
     
                public void run() {
            f3.setVisible(false);    
                }});    
        }
     
     
        public static void main(String[] args) {
            FrameController c = new FrameController();
        }
    }
    Bon là je le fais avec des Frames statiques (en même temps tu n'as normalement besoin que d'un nombre de JFrames limité), mais il pourrait être relativement simple d'utiliser une Map de Frames avec des identificateurs spécifiques...

    De même il vaudrait mieux utiliser des classes héritant de JFrame et leur passer en paramètre du constructeur le controleur...

    ++

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 164
    Par défaut
    Merci

    En fait, j'avais bien pensé faire une classe pour gérer ça, mais comme je débute en Java, la méthode pour la réaliser m'échappe un peu.

    Je vais décortiquer ton code et l'adapter à mon prog.


    Merci encore

  7. #7
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Je te signale à toutes fins utiles que tu peux obtenir la liste de toutes les Frame par Frame.getFrames().

    Sachant qu'une JFrame est une Frame, il est possible de se débrouiller avec cette liste, il me semble.

Discussions similaires

  1. [JFrame] Afficher une image
    Par Burckel dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 21/03/2005, 01h47
  2. [CR 10][VB.NET] Crystal double les valeurs à afficher :'(
    Par nanou_toulouse dans le forum SDK
    Réponses: 2
    Dernier message: 02/03/2005, 17h19
  3. [C#] Détecter les changemens d'un élément (CollectionBase)
    Par Erakis dans le forum Windows Forms
    Réponses: 7
    Dernier message: 12/02/2005, 03h31
  4. coment détecter les positions des cotés d'un rectangle?
    Par einegel dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 18/01/2005, 10h26
  5. comment détecter les faces d'un mur
    Par einegel dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 17/01/2005, 23h12

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