+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Invité de passage
    Inscrit en
    février 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : février 2012
    Messages : 7
    Points : 1
    Points
    1

    Par défaut Accéder au JFrame

    Bonjour je suis confronté à un problème, j'ai une classe "conteneur" qui hérite de JPanel est qui est le content pane de ma JFrame qui est créée dans la classe "principal" à l'intérieur de la fonction main, dans mon content pane(Conteneur) j'ai un bouton "minimize" et j'ai un mouse listener sur ce dernier, et je voudrais pouvoir accéder à la fonction setExtendedState de ma JFrame.
    Comment je peux faire ?
    Merci d'avance.

    Class "principal"
    --JFrame<---------------------------------
    Class "conteneur"(content pane de JFrame) |
    --btn_Minimize>----------------------------

  2. #2
    Membre Expert Avatar de Jidefix
    Profil pro
    Inscrit en
    septembre 2006
    Messages
    724
    Détails du profil
    Informations personnelles :
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : septembre 2006
    Messages : 724
    Points : 1 006
    Points
    1 006

    Par défaut

    Bonjour,

    depuis n'importe lequel des sous-panels de ta JFrame, tu peux utiliser
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Container topLevel = monPanel.getTopLevelAncestor();
    //On peut aussi faire
    //Container topLevel = monJButton.getTopLevelAncestor();
    //Puisque tu recherches directement le haut de la hierarchie.
     
     
    //Faire les vérifications d'usage avant un cast
    JFrame maJFrame = (JFrame) topLevel;
    ou sinon une pratique générale consiste à rajouter un attribut JFrame au JPanel et à le préciser dans le constructeur de ta classe JPanel ou via un setter.

    Pour la bonne pratique j'ai pas d'opinion
    Veuillez agréer nos sentiments les plus distingués. Soyez assurés de notre entière collaboration, bien à vous pour toujours et à jamais dans l'unique but de servir l'espérance de votre satisfaction, dis bonjour à ton père et à ta mère, bonne pétanque, mets ton écharpe fais froid dehors.

  3. #3
    Invité de passage
    Inscrit en
    février 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : février 2012
    Messages : 7
    Points : 1
    Points
    1

    Par défaut

    merci de ta réponse, si je veux faire un setExtendedState (toplevel.ICONIFIED) par exemple, à l'intérieur de ma classe Conteneur et à partir du code que tu m'as donné, comment je fais ? merci d'avance.

  4. #4
    Membre Expert Avatar de Jidefix
    Profil pro
    Inscrit en
    septembre 2006
    Messages
    724
    Détails du profil
    Informations personnelles :
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : septembre 2006
    Messages : 724
    Points : 1 006
    Points
    1 006

    Par défaut

    Du coup ça donnerai quelque chose comme ça:

    Code :
    1
    2
    3
    4
    5
     
    Container topLevel = this.getTopLevelAncestor();
    //Faire les vérifications d'usage avant un cast
    JFrame maJFrame = (JFrame) topLevel;
    maJFrame.setExtendedState(JFrame.ICONIFIED) // Comme ICONIFIED est un champ statique, par convention je préfère le récupérer en utilisant la classe plutot qu'une instance (je ne sais pas s'il y a des raisons techniques qui poussent vers l'un ou l'autre)
    Juste pour le détail, rappelle-toi que pour le compilateur, topLevel n'est qu'un "Container", et n'a donc pas de champ ICONIFIED. Seul "maJFrame" possède ce champ car c'est déclaré en JFrame.
    Même si au runtime "topLevel" et "maJFrame" pointent vers le même objet, il faut bien saisir la nuance.


    edit: en plus j'avais fais une erreur: getTopLevelAncestor() renvoie un Container et pas un JComponent (les compilateurs attentifs auront rectifié d'eux-mêmes )
    Veuillez agréer nos sentiments les plus distingués. Soyez assurés de notre entière collaboration, bien à vous pour toujours et à jamais dans l'unique but de servir l'espérance de votre satisfaction, dis bonjour à ton père et à ta mère, bonne pétanque, mets ton écharpe fais froid dehors.

  5. #5
    Invité de passage
    Inscrit en
    février 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : février 2012
    Messages : 7
    Points : 1
    Points
    1

    Par défaut

    Merci ça marche à merveille, et bonne année 2013.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •