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 :

Fenêtre modales


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut Fenêtre modales
    Bonjour,

    J'ai un petit souci. Je vous l'expose ici:

    Supposons une JFrame principale que l'on va nommer jf1. jf1 crée une seconde JFrame jf2 que l'on affiche puis une JDialog modale jd1. Le souci est que je n'arrive plus à accéder à la fenetre jf2 apres l'affichage de jd1.

    Premiere question : pourquoi ? Je suppose que jf1 est implicitement déclarée comme parent de jf1, ce qui fait que si jf1 crée une fenêtre modale, jf2 n'a pas l'autorisation de passer au dessus.

    Deuxième question : je veux que jd1 ne soit modale que pour jf1, comment faire ?

    Merci d'avance

    Fred

  2. #2
    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
    mavina

    Citation Envoyé par mavina Voir le message
    Premiere question : pourquoi ? Je suppose que jf1 est implicitement déclarée comme parent de jf1, ce qui fait que si jf1 crée une fenêtre modale, jf2 n'a pas l'autorisation de passer au dessus.
    Non c'est plutôt que la modalité s'applique à toute les fenêtres de l'application. Ainsi une boite de dialogue modale bloquera toutes les fenêtres de la même application...

    Citation Envoyé par mavina Voir le message
    Deuxième question : je veux que jd1 ne soit modale que pour jf1, comment faire ?
    Il y a deux solutions... à condition que tu sois sous Java 6 !

    En effet le système de modalité a été revu et nettement améliorer. Le comportement par défaut reste le même mais peut être amélioré. Ainsi on dispose désormais de la méthode setModalityType() qui permet de définir 4 niveaux de modalités sur ton JDialog :
    • APPLICATION_MODAL : Toutes les fenêtres seront bloqués (c'est le comportement par défaut).
    • DOCUMENT_MODAL : Seule les fenêtres parentes seront bloqué. Les fenêtres de la même application sans lien de parenté ne seront pas affecté (c'est ce que tu veux faire )
    • MODELESS : Désactive la modalité (équivalent de setModal(false)).
    • TOOLKIT_MODAL : Ceci permet de bloquer également les autres applications du même toolkit (typiquement les autres applets du même navigateur).

    Donc concrètement ceci devrait résoudre ton problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dialog.setModalityType(ModalityType.DOCUMENT_MODAL);



    La seconde solution serait de mettre une exclusion via setModalExclusionType() sur ta seconde JFrame, afin qu'elle ne soit plus bloqué par les dialogues modales :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jf2.setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE);
    Désormais les dialog modales n'auront plus d'effet sur ta fenêtre...





    Maintenant si tu n'est pas encore passé à Java 6, la seule solution que je vois serait d'utiliser une JDialog pour ta seconde JFrame, afin de la même en "fille" de ta boite de dialogue...


    a++

  3. #3
    Membre confirmé

    Inscrit en
    Juin 2005
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 212
    Billets dans le blog
    1
    Par défaut
    Je ne savais pas que c'était possible, je viens de l'essayer c'est sympa

    Si java 5 suffit de refermer la jf2 pour que jd1 ne soit modale que pour jf1

  4. #4
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Je suis sous Java 6 donc ta solution me convient parfaitement adiGuba, comme à ton habitude très efficace.

    Merci beaucoup !!

    Fred

    edit : petite rectification cependant, il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    jf2.setModalExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDE);
    puisque ModalExclusionType est défini dans Dialog, sinon c'est ok ça fonctionne

  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
    Cela dépend de tes import

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import java.awt.Dialog.ModalExclusionType;
     
    ...
    jf2.setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE);
    ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import java.awt.Dialog;
     
    ...
    jf2.setModalExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDE);
    a++

  6. #6
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Cela dépend de tes import

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import java.awt.Dialog.ModalExclusionType;
     
    ...
    jf2.setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE);
    ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import java.awt.Dialog;
     
    ...
    jf2.setModalExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDE);
    a++
    En effet je n'avais import que Dialog.

    Merci beaucoup

    Fred

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

Discussions similaires

  1. [PowerBuilder] Récupérer la main sur une fenêtre modale
    Par jpdar dans le forum Powerbuilder
    Réponses: 3
    Dernier message: 12/06/2006, 15h21
  2. Modifier un champ à partir d'une fenêtre modale
    Par ahoyeau dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/03/2005, 17h53
  3. Formulaire dans une fenêtre modale
    Par Amnesiak dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 28/02/2005, 15h25
  4. Supprimer la croix dans une fenêtre modale
    Par AnneOlga dans le forum C++Builder
    Réponses: 3
    Dernier message: 15/01/2004, 15h52
  5. Rendre une fenêtre modale non modale
    Par Smortex dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/03/2003, 18h56

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