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 :

Ouverture d'une JFrame en "modal"


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Ouverture d'une JFrame en "modal"
    Bonjour,
    Dans le cadre d'une application "Agenda", je voudrais ouvrir la JFrame2 à partir de la JFrame1. La JFrame 2 doit s'ouvrir en modal: ne pas pouvoir manipuler la première tant que j'ai pas fermé la deuxième.

    J'essai de fair ceci avec le bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ContactJFrame ct = new ContactJFrame();
            JDialog jd = new JDialog(ct, true);
    J'obtiens donc ma JFrame modal mais vide (ne contient pas les éléments de ma JFrame)

    Pourtant que j'essai d'ouvrir normalement la JFrame normalement, ça marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ContactJFrame ct = new ContactJFrame();
    ct.setVisible(true);
    Je pense que ça doit être un problème d'instanciation de la JFrame à afficher avec une JDialog.

    Je vous remercie pour votre aide!

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    La parametre JFrame dans le constructeur de JDialog, c'est la frame qui va etre desactivée.
    Il faut en fait que tu fasses deriver ContactJFrame de JDialog.

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 159
    Points : 467
    Points
    467

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par yannart
    J'ai déjà vu cette ce sujet avant de poser ma question, mais je n'ai justement pas de réponse!

  5. #5
    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
    Points : 722
    Points
    722
    Par défaut
    J'ai l'impression que tu interprètes mal le constructeur de JDialog. Comme le dit Sanguko, le paramètre JFrame que tu passe au constructeur de ta JDialog c'est la fenêtre mère de ta JDialog (la fenêtre à laquelle sera liée ta JDialog).
    En aucun cas, en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JDialog jd = new JDialog(ct, true);
    tu ne retrouveras les composant de ta ContactJFrame dans ta JDialog.

    Avec le bout de code que tu as posté :
    - tu crées une ContactJFrame (je ne sais pas ce que fait ce constructeur, mais j'imagine qu'il doit te faire une jolie JFrame contenant ce que tu veux)
    - tu crées une JDialog vide que tu lies à ta ContactJFrame

    Et c'est tout...

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci pour vos contributions.
    J'ai réussi à le faire finalement.

    Voilà, j'ai donc dérivé ma ContactJFrame de JDialog:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class ContactJFrame extends javax.swing.JDialog {
        public ContactJFrame(java.awt.Frame parent, boolean modal) {
            super(parent, modal);
            initComponents();
        }
    Quant'à ma MainJFrame, elle fait appel à la ContactJFrame en utilisant la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new NewJDialog(new javax.swing.JFrame(), true).setVisible(true);
    NetBeans en mode "Design" m'a été d'une aide précieuse

  7. #7
    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
    Points : 722
    Points
    722
    Par défaut
    Citation Envoyé par mouazen
    Quant'à ma MainJFrame, elle fait appel à la ContactJFrame en utilisant la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new NewJDialog(new javax.swing.JFrame(), true).setVisible(true);
    NetBeans en mode "Design" m'a été d'une aide précieuse
    Euh... Là je suis pas sûr...
    Ce qu'il vaut mieux que tu fasses c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new NewJDialog(taMainJFrame, true).setVisible(true);
    car le premier paramètre représente la Frame mère de ta JDialog (celle à qui elle sera liée). Du coup, si tu passes une new JFrame en paramètre, ça va lier ta JDialog à une fenêtre qui n'est pas affichée, et c'est pas le but.

    Et je serai toi, je garderai quand même une référence ver ta JDialog :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NewJDialog myDialog = new NewJDialog(taMainJFrame, true);
    myDialog.setVisible(true);
    Comme ça tu peux accéder à ta NewJDialog, ce qui est généralement utile...

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bon, mais ça marchait comme même avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ContactJDialog contactJDialog = new ContactJDialog(new javax.swing.JFrame(), true);
    Mais bon, par précaution j'ai modifié le code, donc le nouveau code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ContactJDialog contactJDialog = new ContactJDialog(new MainJFrame() , true);
    contactJDialog.setVisible(true);
    Et Merci

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    Ecrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ContactJDialog contactJDialog = new ContactJDialog(new MainJFrame() , true);
    ca n'a pas beaucoup de sens.

    Soit tu ecris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ContactJDialog contactJDialog = new ContactJDialog(null, true);
    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ContactJDialog contactJDialog = new ContactJDialog(myFrame, true);
    avec myFrame une frame visible à l'écran, et qui doit être "gelée" au moment ou tu ouvre la boite de dialog.

  10. #10
    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
    Points : 722
    Points
    722
    Par défaut
    Citation Envoyé par mouazen
    Bon, mais ça marchait comme même avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ContactJDialog contactJDialog = new ContactJDialog(new javax.swing.JFrame(), true);
    Mais bon, par précaution j'ai modifié le code, donc le nouveau code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ContactJDialog contactJDialog = new ContactJDialog(new MainJFrame() , true);
    contactJDialog.setVisible(true);
    Et Merci
    Ouais, enfin ça marchait, tu devrais plutôt dire que ça t'affichait ta boîte de dialogue.
    Parce qu'après derrière t'avais (et tu as toujours avec ton nouveau code) un lien entre ta JDialog et une JFrame qui n'est pas affichée. Du coup, je ne suis même pas sûr que le comportement modal soit respecté...

    Et puis si tu commences à mettre des liens vers des composants qui ne servent à rien, et qui ne sont pas affichés juste pour la création d'une boîte de dialogue, qu'est-ce que ça va être quand tu vas devoir créer tes propres listener ou autres mécanismes autrement plus complexes que l'affichage d'une boîte de dialogue.

    Après, libre à toi d'écrire le code que tu veux, mais à ta place je tiendrai compte de nos conseils car j'ai l'impression que t'es en train de prendre de mauvaises habitudes...

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    c vrai ke c mieu d'apler com ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ContactJDialog contactJDialog = new ContactJDialog(null, true);
    encore une fois, ça marchait bien et le modal etait bien géré com ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ContactJDialog contactJDialog = new ContactJDialog(new javax.swing.JFrame(), true);

  12. #12
    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
    Points : 722
    Points
    722
    Par défaut
    Une des raisons pour lesquelles je ne mets jamais null en paramètre, c'est que si tu fais perdre le focus à ton appli et que tu le lui redonnes en cliquant dans la barre des tâches, ta boîte de dialogue sera masquée et tu ne pourras l'atteindre que via des Alt+Tab. Ce qui est relativement contraignant.
    Même chose si tu lui passes une Fram non visualisée en paramètre.
    Alors que si tu mets la JFrame parente, la boîte de dialogue lui sera liée et apparaîtra devant la Frame lors de la reprise de focus.

    Enfin bref, je ne vais pas essayer de te convaincre d'appliquer la méthode que l'on te conseille, tu finiras par te rendre compte toi-même de la necessité de comprendre ce que l'on code...

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

Discussions similaires

  1. Ajouter de la musique à l'ouverture d'une JFrame
    Par jean_bobi dans le forum Agents de placement/Fenêtres
    Réponses: 20
    Dernier message: 29/03/2015, 18h38
  2. Obtenir le focus à l'ouverture d'une JFrame
    Par doons dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 07/03/2010, 04h28

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