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 :

[JFrame] l'actualiser tout en la rendant inaccessible


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 42
    Par défaut [JFrame] l'actualiser tout en la rendant inaccessible
    bonjour à tous,

    je crée actuellement un petit logiciel de transformations d'image et j'ai un soucis.

    certaines méthodes sont assez longues sur de grosses images donc j'ai voulu rajouter une petit barre d'état mais probleme lors de l'appel de la transformation via un actionPerformed cela freeze la fenetre et l'affichage du pourcentage effectué ne s'affiche pas.

    j'ai essayé en faisant un nouveau thread pour la transformation, l'affichage de progression fonctionne nickel mais voilà, la fenetre est disponible donc l'utilisateur peut enchainer une nouvelle opération sans que la 1ere soit terminé (l'image finale est bien dégeu)

    j'aimerais donc qu'il ne puisse rien faire pendant une transformation OU BIEN permettre une actualisation de la fenetre avec le thread principal seulement.

    il y a des MouseListener, ActionListener, MouseMotionListener, JInternalFrameListener

  2. #2
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    salut,

    tu pourrais utiliser le glasspane, et faire en sorte que celui-ci attrape tous les évènements quand ta tâche est lancée et ne fasse rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    frm.getGlassPane().addMouseListener(new MouseAdapter(){});
    frm.getGlassPane().addKeyListener(new KeyAdapter(){});
    et quand tu lances ta tâche, tu rends le glasspane visible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frm.getGlassPane().setVisible(true);
    et à la fin de ta tâche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frm.getGlassPane().setVisible(false);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 42
    Par défaut
    j'ai déja vu le non de glassPane, c'est quoi en gros??
    quel est son role??



    j'ai pas tout compris en fait

  4. #4
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    une JFrame est composée de plusieurs couche (rootpane, layeredpane, contentpane et glasspane), le glasspane vient au dessus du tout; c'est une couche transparente, généralement caché ( en fait, c'est juste un Component)



    donc, si tu le rends visible, et qu'il attrape tous les événements, et sachant qu'il est au dessus de la JFrame, il ne laissera aucun événement passer à travers lui et aller à la jframe

    si tu ne comprends toujours pas mon bla bla, fais un tour au tutorial de sun http://java.sun.com/docs/books/tutor.../rootpane.html

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 42
    Par défaut
    ah vi avec le shéma c'est clair

    vu le nom (vitre) j'aurais pu y pensé^^

    je teste ça et je te dis.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 42
    Par défaut
    bon ça fonctionne partiellement, mais la JInternalFrame (qui contient un Jpanel) qui est bien bloqué n'as pas l'air d'etre aussi bloqué sur le JPanel.

    j'ai trouvé la parade en rajoutant un boolean qui est true au début de l'opération et false à la fin et qui est vérifié quand on veux quitter le logiciel, utiliser le Jpanel etc...

  7. #7
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    salut,

    bon ça fonctionne partiellement, mais la JInternalFrame (qui contient un Jpanel) qui est bien bloqué n'as pas l'air d'etre aussi bloqué sur le JPanel.
    j'ai pas très bien compris ce que tu veux dire. Le glasspane est au dessus de la jframe et de tous ses composants; s'il ne bloque pas un certain événement, c'est qu'il faut simplement lui dire d'attraper cet événement et de ne rien faire. Dans l'exemple que je t'avais donné, il n'attrapait que l'événement KeyEvent et MouseEvent, donc, tu peux toujours lui ajouter les événements que tu veux bloquer

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 42
    Par défaut
    je vais essayé de mettre la hiérarchie de composants de mon prog :

    -une JFrame principale
    -un DesktopPane dans cette JFrame
    -plusieures JInternalFrame dans ce JDesktopPane
    -un JPanel dans chaque JInternalFrame

    un BufferedImage est "painté" sur chaque JPanel.

    il y a un MouseWheelListener, MouseMotionListener et MouseListener pour chque JInternalFrame, les methodes sont implémentés dans la classe qui extends le JPanel.

    j'ai donc rajouté ces 3 listeners au glassPane de la JFrame principale.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 42
    Par défaut
    bon , changement de programme (lol) j'ai dû rajouter un bouton annuler lors des transformations de l'image donc le glassPane impossible à utiliser.

    j'utilise mon booléen "programmeOccupe" lorsque la transformation commence donc c'est pas trop mal, et ça fonctionne pas mal là.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Par défaut
    Je peux peut-etre me gourrer, mais tu ne ferais pas l'inverse ? : faire le traitement bloquant dans le thread principal (bloqué) et creer au debut du traitement un thread avec un thermo de progression qui afficherait l'état du process de transformation ? (Dialogue du thermo avec un bouton Annuler, effectivement)

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 42
    Par défaut
    oui mais le problème serait le même puisque l'opération ce fait dans le thread principal (l'appel de l'opération est dans l'actionPerformed()) tant que la methode actionPerformad() n'est pas terminée l'interface est freezée donc même en faisant un thread à part pour la maj de la barre de progression elle ne se mettrait pas à jour.

Discussions similaires

  1. [XL-2010] actualiser tout les tableaux croisé dynamique
    Par johanaquatique dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 08/06/2019, 22h31
  2. [AC-2007] equivalent du bouton "actualiser tout" de access en VB
    Par greg360 dans le forum VBA Access
    Réponses: 18
    Dernier message: 20/04/2018, 14h43
  3. [XL-2007] problème de formule lorsque j'appuie sur actualiser tout
    Par dagda01 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/03/2012, 10h46
  4. Réponses: 1
    Dernier message: 09/02/2009, 15h31
  5. [JFrame] Désiconifier toutes les autres fenêtres en même temps
    Par stoukou dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 07/10/2005, 12h01

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