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 :

Fenetres bloquant d'autres fenêtres?. Est-ce possible?


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 116
    Par défaut Fenetres bloquant d'autres fenêtres?. Est-ce possible?
    Bonjour à tous,

    J'ai un détecteur de changement de fichiers dans un répertoire.
    ex : création nouveau fichier.

    Lorsque je détecte ça, et que l'extension correpond a ce que je veux, une fenêtre (classe extends JFrame) est appellée pour modifier ce fichier, etc...

    Seulement problème auquel je n'avais pas pensé auparavant, c'est si je copie 15 fichiers dans ce repertoire, il va détecter tous les "nouveaux fichiers" et me lancer 15 interfaces en même temps. Ce qui n'est pas très cool.

    Y a-t-il un moyen de bloquer les nouvelles fenetres tant que la fenêtre appellée n'a pas été fermée?

    (Je ne sais pas si c'est très clair...je vais tenter un exemple)

    A = interface principale qui instancie (-->) le détecteur de changement. (C)
    B = interface appellée par le détecteur de changement. (C)

    donc ce que je ne veux pas (et qui est le cas pour le moment) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    A --> C
    si changements ds le répertoire..
    C-->B
    C-->B
    C-->B
    etc..
    => 15 B en même temps.


    ce que je veux obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    A-->C
    si changements ds le répertoire..
    C-->B
    C attend que B ferme..
    B est fermé.
    C-->B
    C attend que B ferme..
    B est fermé.
    C-->B 
    etc...

    La mécanique derrière est la suivante :
    lors d'une détection de changement, un tableau de File est envoyé à C
    C traite ce tableau de File dans un "for" et fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new B(file[i].getAbsolutePath())
    J'aurais bien appellé un JOptionPane mais l'interface est trop complexe que pour le faire.

    Merci a vous

  2. #2
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Pourquoi ne pas faire de C un frame avec un JTabbedPane et de B une classe qui etend JPanel ? Comme ça, au lieu de plusieurs JFrame, t'en as une seul avec plusieurs onglet contenant chacun un fichier! Ce n'est pas forcement ce que tu veux, mais bon. Sinon, tu peux faire ceci dans ta classe C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private boolean isOpened = false;
     
    void setBisOpened(boolean isOpened) {
         this.isOpened = isOpened;
    }
    Ensuite, tu changes ton constructeur B en public B(String path, C parent), comme ça, quand t'as classe B en a fini de faire ce qu'elle a à faire, tu fais,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    parent.setBisOpened(false);
    dispose();
    Ta fenetre B est fermé, C est au courant !
    Ensuite tu peux reprendre dans t'as classe C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void creerFenetre(File[] f) {
          int size = f.length;
          for(int i = 0; i < size; i++) {
              isOpened = true;
              new B(f[i].getAbsolutePath(), this);
             while(isOpened == true) {
                    System.out.println("B fais ce qu'elle a à faire !");
             }
           }
    }
    Voila. Je ne suis pas du tout sur que ce code fonctionnne, c'est juste pour te montrer le chemin, c'est a toi qu'il appartient de franchir la porte ^^.
    Bonne chance

  3. #3
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Ou sinon tu peux utiliser une JDialog modale, ça te bloquera tout le reste tant qu'elle ne sera pas fermée.

  4. #4
    Membre émérite Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Par défaut
    J'aurai fait une file d'attente (fifo ), avec sur mes fenêtres un bouton (ou un handler sur la fermeture de la fenetre) qui spécifie à la classe appelante que l'utilisateur a fini et qu'il peut ouvrir la suivante... non ?
    +++
    Ju

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 116
    Par défaut
    mais comment lui spécifier?

    C'est 3 classes (même 4 en réalité : 2 pour la détection) différentes qui ont besoin d'être instanciées. => comment faire?

    J'avais penser mettre un champ static boolean dans ma classe B.

    je le mettrais à true dans la classe,

    il passerais à false pdt le constructeur de B

    et true à la fermeture.


    Mais l'attente active ne risque pas de manger trop de resources?

  6. #6
    Membre émérite Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Par défaut
    Tu lui passes la référence de l'appelant dans le constructeur, le construit fait sa popote et à la fin il notifie le parent qu'il a fini, comme ca le parent au suivant, etc...

    Sinon tu as toujours la solution de Descent.

  7. #7
    Membre expérimenté Avatar de Lethal
    Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 194
    Par défaut
    Oui je vois pas pourquoi tu te casses la tête à vouloir réinventer la roue.

    La classe JDialog est prévue pour ca!

  8. #8
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 116
    Par défaut
    ok

    mais ca ne marche quand même pas.
    j'ai beau faut faire des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.setmodal(true);
    ok ca me la rend "modal" dans le sens où je ne sais plus donner les focus a une autre JDialog du programme mais les autre JDialog (qui normalement ne devraient être créées qu'après la fermeture de la fenetre) sont affichées en arrière plan)

    => comment faire?

  9. #9
    Membre émérite Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Par défaut
    As tu essayé ce que je t'avais proposé ? -> file d'attente...

  10. #10
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Citation Envoyé par koolway
    ok

    mais ca ne marche quand même pas.
    j'ai beau faut faire des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.setmodal(true);
    ok ca me la rend "modal" dans le sens où je ne sais plus donner les focus a une autre JDialog du programme mais les autre JDialog (qui normalement ne devraient être créées qu'après la fermeture de la fenetre) sont affichées en arrière plan)

    => comment faire?
    Comment crées-tu/instancies-tu tes JDialog? Dans une boucle? Dans des threads séparés?

  11. #11
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 116
    Par défaut
    J'instancie ma classe qui extends JDialog dans une boucle,

    dans la classe je crée un nouveau thread.

    sozie9372 :

    j'ai finalement mis un booleen OQP en statique dans la classe, et dans ma boucle juste avant la création je fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    while(InterfaceB.OQP){}
    new InterfaceB();
    et à la fermeture de cette fenetre, je met le booleen à false.

    Ca marche plutot pas mal... même très bien.


    Merci à tous pour votre aide

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/08/2011, 01h02
  2. [DIV] afficher un DIV d'une fenetre dans une autre fenêtre
    Par jdvacheron dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/02/2008, 12h22
  3. [C#] appler une fenêtre d'un autre projet! est ce possible??
    Par othland dans le forum Windows Forms
    Réponses: 1
    Dernier message: 10/04/2006, 09h55
  4. Descendre le scroll de la fenetre IE... est-ce possible ?
    Par angelevil dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/06/2005, 15h06
  5. Fenêtre popup modale. Est-ce possible ?
    Par Amnesiak dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/02/2005, 17h35

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