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 :

Récupérer la fenêtre mère de l'appli


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut Récupérer la fenêtre mère de l'appli
    Bonjour,

    J'aimerai savoir s'il est possible de récupérer la fenêtre mère de mon appli depuis n'importe quel classe de mon appli?

    Je m'explique : je dois ouvrir une JDialog depuis une classe qui n'est pas une JFrame, ni une JDialog (l'ouvreture provient d'un clic sur un menu déroulant).
    Or pour ne pas que ma JDialog passe en arrière-plan lors d'une perte et d'un regain de focus de mon appli, je dois préciser une fenêtre parent à ma JDialog.

    Plutôt que de passer un paramètre en plus ou de créer une réfèrence statique vers ma fenêtre principale (ce qui ne me semble pas très propre), j'aimerai récupérer une réfèrence vers ma fenêtre principale depuis n'importe où.

    Est-ce que SwingUtilities, System ou autre me permet de faire ça?
    (je cherche, mais je ne trouve pas...)

    Merci d'avance!

  2. #2
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut
    Le plus simple et le plus propre est de créer une méthode getInstance().

    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
    public class TaClasse
    {
        private static TaClasse m_Instance = null;
     
        public TaClasse()
        {
            /* ... */
            m_Instance = this;
        }//constructeur
     
        static public TaClasse getInstance()
        {
            return m_Instance;
        }//getInstance()
     
        /* ... */
    }//TaClasse
    Avec ça, tu peux récupérer ta classe en faisant TaClasse.getInstance() de n'importe quelle autre classe.

  3. #3
    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 Re: Récupérer la fenêtre mère de l'appli
    Salut,

    Citation Envoyé par seiryujay
    Plutôt que de passer un paramètre en plus ou de créer une réfèrence statique vers ma fenêtre principale (ce qui ne me semble pas très propre), j'aimerai récupérer une réfèrence vers ma fenêtre principale depuis n'importe où.
    Le design pattern du Singleton peut être une bonne solution dans ce cas...

    Citation Envoyé par seiryujay
    Est-ce que SwingUtilities, System ou autre me permet de faire ça?
    (je cherche, mais je ne trouve pas...)
    Non pas directement... En effet la notion de fenêtre principale n'est pas forcément la même pour toutes les applications, en particulier dans le cas d'application multi-fenêtre. Donc cela dépend de ton programme, et tu peux eventuellement utiliser Frame.getFrames() pour obtenir la liste des Frame ouvertes par ton application...

    a++

  4. #4
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Merci beaucoup!
    J'ai fait un mix des 2 solutions

    J'ai créé une méthode getInstance() dans ma classe mère qui fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public static MaClasse getInstance() {
    		Frame[] frames = MaClasse.getFrames();
     
    		for (int i=0; i<frames.length; i++) {
    			if (frames[i] instanceof MaClasse)
    				return (MaClasse) frames[i];
    		}
     
    		return null;
    	}
    Par contre, petite question : le DP Singleton, c'est pas pour avoir juste une seule instance simultanément de ma classe mère?
    Si c'est le cas, je vois pas en quoi ça me sert ici...

  5. #5
    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 seiryujay
    Par contre, petite question : le DP Singleton, c'est pas pour avoir juste une seule instance simultanément de ma classe mère?
    Si c'est le cas, je vois pas en quoi ça me sert ici...
    Si tu as une notion de fenêtre principale, je suppose que tu en as une seule...


    Perso j'utilise beaucoup le DP du Singleton (un peu trop peut-être). Ainsi pour une application graphique j'utilise une classe singleton du style :


    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
    public class Application {
     
    	private static final Application INSTANCE = new Application();
     
    	private MaClasseFrame frame = null;
     
     
    	private Application() {
    	}
     
    	public static Application getInstance() {
    		return INSTANCE;
    	}
     
     
     
     
    	public MaClassFrame getFrame() {
    		if (this.frame==null) {
    			// Instanciation de la frame :
    			this.frame = new MaClasseFrame();
    		}
    		return this.frame;
    	}
     
    }
    Ainsi le code Application.getInstance().getFrame() me renvoit ou me crée ma frame principale...

    a++

  6. #6
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Ok, merci pour ces précisions.

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

Discussions similaires

  1. Popup se chargeant sans attendre la fenêtre 'mère'?
    Par xavier.misseri dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/11/2005, 13h10
  2. [Liaison popup vers fenêtre mère] Problème Mozilla
    Par bugalood dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/11/2005, 02h33
  3. Passage de paramètre fenêtre mère --> popup fill
    Par senacle dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/10/2005, 15h48
  4. Ecrire dans textarea d'une popup depuis fenêtre mère
    Par ddams dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 20/09/2005, 17h27
  5. Récupérer le chemin complet de l'appli
    Par alainpeniche dans le forum Windows
    Réponses: 3
    Dernier message: 10/08/2005, 14h03

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