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

Langage Java Discussion :

Problème d'evenements dans un MVC


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 13
    Par défaut Problème d'evenements dans un MVC
    Bonjour,

    Je débute avec le modèle MVC et rencontre un obstacle que je vous décris :

    Avant tout, voici très brievement le but de l'application : gèrer une liste de données au niveau modèle. Au niveau de la vue, l'utilisateur peut ajouter des données à cette liste, et ajouter des filtres qui présenteront dans des onglets differents les informations filtrées de la liste du model satisfaisant le filtre ajouté.


    J'ai, au niveau de ma vue, la possibilité d'instancier des feuilles d'un JTabbedPane via un bouton B1 qui grossierement appel la méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JTabbedPane.addTab(String,Component)
    Ces objets implémentent l'interface du model pour recevoir les évenements du model et mettre à jour l'affichage de chaque feuille de JTabbedPane. (il s'agit d'une liste de String....bref)

    Lors d'un clique sur B1, un évenement est envoyé au model (çà passe par le controleur mais ca n'a pas d'importance ) - qui, à sa réception, met à jour la base de données, ajoute l'objet source à la liste des listenners du model, (l'objet source étant la nouvelle feuille du JTabbedPane instanciée) puis, renvoie un évenement aux objets de la vue écoutant le modele pour afficher dans cette feuille de JTabbedPane les donnees envoyées (filtrees) par le model.

    Mon problème est le suivant:

    Si je clique n fois de suite sur le bouton, j'instancie ainsi n feuilles de JTabbedPane differentes, et donc n objets different qui ecoutent le même model.

    Or, sur chaque feuille, les données sont censées être potentiellement differentes (filtres differents) mais envoyées à partir de la même base de donnnées dans les évenement.

    Ma question est la suivante :

    Quel moyen orienté objet existe-t'il pour que chaque feuillle de mon JTabbedPane traite ou non évenement, destinés à TOUS les objets écoutant le modele?

    Autrement dit, si je veux ajouter un string à mon model, et que cet ajout ne provoque qu'un changement uniquement dans certaines feuilles de la vue et pas toutes, comment dois-je m'y prendre?

    J'avais l'idée de mettre dans l'évement envoyé par modèle à la vue la référence d'une feuille, pour que chaque feuille, écoutant le model, verifie ou non si l'evenement lui ai bien destiné pour ajouter ou non l'information.

    Mais en fait cela ne marche que si l'evenement est destiné à un seul objet et ici, plusieurs feuilles peuvent théoriquement prendre en compte ou pas l'evenement...toutes mes feuilles écoutent le meme model et donc recoivent toutes les evenements...

    j'espère que mon problème n'est pas trop flou

    Je cherche, je cherche, et vous tiens au courant de mon avancement...

    Merci à ceux qui se penchent sur mon problème

    Baptiste

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Peut-être quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    // Classe modèle de base
    public class XyzModel extends ... implements ... {
     
       public void addXyzModelEventListener(XyzModelEventListener listener) {
          ...
       }
     
       protected void fireXyzChanged(XyzModelEvent e) {
          ...
       }
    }
     
    // Classe modèle avec filtre
    public class FilteredXyzModel extends XyzModel implements XyzModelEventListener {
     
       protected XyzModel model;
       protected XyzFilter filter;
     
       public FilteredXyzModel(XyzModel model, XyzFilter filter) {
          this.model = model;
          this.filter = filter;
     
          // on écoute le modèle de base
          this.model.addXyzModelEventListener(this);
       }
     
       @Override
       protected void fireXyzChanged(XyzModelEvent e) {
          // filtrage selon l'événement
          if (filter.accept(e)) {
             super.fireXyzChanged(e);
          }
       }
    }
     
    public interface XyzFilter {
       boolean accept(XyzModelEvent e);
    }
    ensuite les objets de la vue s'abonnent au "bon" modèle.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 13
    Par défaut
    A a a!
    J'aime j'aime
    Tu veux dire que j'instancierais autant d'objets écoutables que j'ai de filtres au niveau du model?
    Je n'aurai alors qu'a utiliser la methode firechanged du bon objet...

    Impeccable, merci pour ta réponse si rapide

    je vais voir ce que je peux faire la dessus

  4. #4
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Tu veux dire que j'instancierais autant d'objets écoutables que j'ai de filtres au niveau du model?
    Oui, tout à fait. Tu as "n" instances de filtre (anonyme ou non) => "n" modèles différents
    Je n'aurai alors qu'a utiliser la methode firechanged du bon objet...
    Attention, la méthode fireChanged est "normalement" protected : elle est appelée en interne par les méthodes du modèle lorsqu'une modification doit être signalée aux écouteurs. Tu n'as pas à "utiliser la méthode du bon objet", ça va se faire tout seul, à condition bien sûr de connecter la vue sur le bon modèle.

Discussions similaires

  1. Evenement dans evenement ?¿ Problème
    Par anat1212 dans le forum VB.NET
    Réponses: 1
    Dernier message: 14/09/2009, 17h06
  2. Problèmes Evenement dans un DataGridView
    Par Loubna.B dans le forum C#
    Réponses: 10
    Dernier message: 07/07/2009, 17h37
  3. [Conception] MVC - Déclarer l'écouteur d'evenement dans la vue.
    Par etiennegaloup dans le forum Général Java
    Réponses: 9
    Dernier message: 04/01/2006, 18h50
  4. Réponses: 19
    Dernier message: 27/08/2003, 15h32
  5. problème de guillemets dans une formule shell
    Par dim_italia dans le forum VBA Access
    Réponses: 7
    Dernier message: 18/08/2003, 12h46

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