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] Normes de dév.


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Avatar de if_zen
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 275
    Par défaut [MVC] Normes de dév.
    Bonjour,

    J'aimerais savoir s'il existe une sorte de norme concernant le traitement des actions opérées par l'utilisateur sur son IHM qui doivent adapter d'autres parties de l'IHM. Sans faire attention, il peut se trouver un effet de boucle infinie quand on met un jour un composant qui doit changer l'état d'un autre composant. Cet autre composant avec son changement d'état doit mettre à jour le 1er composant, etc. Prenons un cas concret.

    Mettons que je dispose d'une IHM contenant deux JList, ayant chacune des données dans leur modèle. On ajoute à ces deux listes un même ListSelectionListener, qu'on va appeler Ctrl.
    Admettons que je veuille une seule sélection parmi les deux listes (si je sélectionne un élément de la liste1, je veux enlever la selection des élements de la liste2, et inversement).

    Sans réflexion particulière, dans la méthode valueChanged de Ctrl, je regarde d'ou vient l'événement et je dis à l'autre liste de faire un clearSelection(). Le clearSelection rappelle la méthode valueChanged de la deuxième liste, et pourrait forme une boucle infinie sans tests supplémentaires.

    Il est clair qu'on peut facilement ajouter une bricole dans le test effectué dans valueChanged, mais je me pose la question si la technique employée est "sun-certified".

    On peut se trouver sur des cas plus complexes. Une autre méthode que j'ai employée, peut-être pas propre : dans un bloc synchronisé sur la liste2, je regarde si mon Ctrl figure dans les Listeners, je le supprime, je fais mon clearSelection, et je remets le Ctrl dans les Listener si nécessaire.
    (Très) schématiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    synchronized(liste2)
    {
        boolean addListener <-- (liste2.listeListeners CONTIENT Ctrl);
        liste2.clearSelection();
        SI (addListener) ALORS liste2.addSelectionListener(Ctrl);
    }
    En fait, le problème c'est quand on ajoute des Listeners aux composants dans l'idée de capter les interactions utilisateurs, cela peut poser problème dans les traitements-système, et appliquer de updates non désirés.

    Avez-vous des astuces, ou des "standards" à ce sujet ?
    Merci beaucoup.

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    À ma connaissance, rien de formalisé. La seule règle que je connaisse est de ne pas changer quelque chose du composant source dans son listener, sinon tu risques d'entrer dans une boucle infinie comme tu le soulignes.

    On pourrait limiter cette règle à la seule propriété écoutée, il me semble qu'il vaut mieux l'étendre à toutes les propriétés du composant par prudence, car les propriétés sont souvent liées les unes aux autres dans le monde des GUIs.

    Aprés, cela dépend de ta politique de mise en oeuvre des listeners et évènements. Si tu choisis de n'utiliser qu'un seul listener pour toutes tes listes, alors par voie de conséquence tu ne peux changer aucune liste depuis ce listener, sauf bidouille particulière et forcément mal foutue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  2. [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
  3. wxWindows et DevC++ : taille de l'exe énorme !
    Par ovh dans le forum Dev-C++
    Réponses: 7
    Dernier message: 19/11/2003, 17h01
  4. Classe abstraite / MVC
    Par caramel dans le forum MVC
    Réponses: 5
    Dernier message: 01/04/2003, 09h27
  5. Normes EDI
    Par f-demu01 dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 14/03/2003, 08h22

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