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 :

MVC et JProgressBar


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 116
    Par défaut MVC et JProgressBar
    Bonjour à tous,
    Je travaille sur une application designée selon le pattern MVC. Tout fonctionne correctement mais je me pose la question suivante.
    J'ai un traitement long à effectuer, mais qui ne nécessite pas d'être lancée dans une Thread différente de l'EDT car mon application est mono-threadée : l'utilisateur n'a pas le choix d'attendre la fin du traitement long
    Ce traitement est lancé après un clic dans une JMenuBar, qui est une vue abonnée aux listeners de mon modèle via mon controleur.
    Pour le traitement long, je veux utiliser une ProgressBar. Où dois-je la mettre pour respecter MVC ? Selon moi plusieurs choix :
    1/ la vue s'occupe d'appeler la classe de traitement long et n'informe le contrôleur que quand le traitement est fini et qu'il y a quelque chose à fournir au modèle ? Ce cas me semble le plus simple car tout se passe en dehors du C et du M !
    2/ la vue s'occupe juste de notifier au contrôleur que l'utilisateur a lancé le traitement long. Là j'ai des doutes : est-ce que le contrôleur n'informe le modèle qu'une fois que le traitement est fini et qu'il y a un résultat à transmettre au modèle pour le modifier ? Ou est-ce que le Contrôleur lance le traitement via un model.effectueTraitementLong ? Dans ce dernier cas, ça me semble une montagne pour respecter MVC car il faudrait que par exemple à chaque itération, le modèle informe par un fire() le contrôleur de ces changements, et que le contrôleur synchronise les vues, donc ma JProgressBar.

    Merci de vos réponses "architecturales" !

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Peut être trouveras tu réponse par ici :

    http://rom.developpez.com/java-swingworker/
    http://blog.developpez.com/adiguba/p...r_swingworkers

    Sinon il te faudra un thread pour le process, et utiliser invokeLater sur tout ce qui concerne les changement de composants graphique.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 116
    Par défaut
    Non non, pas besoin de swingworkers justement, car mon appli est mono-thread, et les swingworkers j'en ai soupé ! Ma question est sur l'architecture à adopter pour la communication avec une ProgressBar dans une architecture MVC.

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Sorry, j'ai dut mal te comprendre
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 116
    Par défaut
    pas de soucis ... mais ça te dit rien ma question ?

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah c'est simple, tu définis un modèle Task, qui a un compteur allant de un à cent et un statut par exemple. Modèle qui déclenche les évenements à chaque changement de compteur/statut.


    Une TaskView qui contient ta JProgressBar et qui écoute ce qui ce passe dans ton modèle et réagit de façon accordée

    Un TaskController qui gère le tout et effectue l'action longue (soit par une méthode ou par un Runnable).

    Mais de toute façon, ta JProgressBar, dans une appli mono thread, je ne vois pas franchement l'intérêt. Elle ne bougera pas tant que la tâche longue ne se sera pas achevée si celle si implique des flux ou des algos bourrins.

  7. #7
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Citation Envoyé par maccormick Voir le message
    J'ai un traitement long à effectuer, mais qui ne nécessite pas d'être lancée dans une Thread différente de l'EDT car mon application est mono-threadée : l'utilisateur n'a pas le choix d'attendre la fin du traitement long
    Citation Envoyé par maccormick Voir le message
    Ce traitement est lancé après un clic dans une JMenuBar, qui est une vue abonnée aux listeners de mon modèle via mon controleur.
    Pour le traitement long, je veux utiliser une ProgressBar.
    Il me semble detecter une incohérence ici
    Soit le traitement est fait dans l'EDT et il ne faut pas espérer mettre à jour l'ihm avant la fin (ce qui rend le progress bar inutile), soit il est fait hors de l'EDT, donc dans un autre thread...

  8. #8
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Bah oui c'est ce que je pense depuis le début en fait... donc je ne suis pas fou
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 116
    Par défaut
    bah oui en fait ! effectivement, dit comme ça, je détecte l'incohérence aussi ... bon, bah je vais faire mon traitement dans un autre thread ... c'est dommage de se compliquer la vie pour une cohérence conceptuelle native au langage !
    merci et @+

  10. #10
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Citation Envoyé par maccormick Voir le message
    bah oui en fait ! effectivement, dit comme ça, je détecte l'incohérence aussi ... bon, bah je vais faire mon traitement dans un autre thread ... c'est dommage de se compliquer la vie pour une cohérence conceptuelle native au langage !
    merci et @+
    En fait, ce n'est pas qu'en java que tu as ça. Mais sur quasiment tous les toolkits UI quels qu'ils soient...

    En effet, il ne faut pas bloquer le thread de rendu, sinon, plus de rendu.

Discussions similaires

  1. Avancement de la tâche de JProgressBar utilisant le MVC?
    Par Zalawy dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 31/01/2013, 19h47
  2. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  3. [GEF]GEF EditViewPart MVC etc...
    Par georgemel dans le forum Eclipse Platform
    Réponses: 4
    Dernier message: 19/07/2007, 19h07
  4. [MVC] Différences entre les framework MVC push et pull ?
    Par XavierZERO dans le forum Frameworks Web
    Réponses: 5
    Dernier message: 15/01/2004, 13h12
  5. Classe abstraite / MVC
    Par caramel dans le forum MVC
    Réponses: 5
    Dernier message: 01/04/2003, 09h27

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