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 :

Controleur dans le service package


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Par défaut Controleur dans le service package
    Bonjour;

    J'ai une IHM en Swing qui communique avec un controleur via ListenerAction pour déclencher les actions. J'ai séparé ds 2 packages différent l'iHM elle même avec le controleur.
    L'iHM est dans un package à part et je souhaite rattaché la classe controleur qui implémente la classe ActionListener dans le package service (la ou il y'a le traitement des actions).
    mais j'ai un import circulaire :

    - IHM doit faire un import du controleur pour appeller “actionPerformed” du controleur
    - Le Controller doit faire un import de la vue “Swing IHM” pour envoyer les données qu'elle doit assembler pour les affichées à l'utilsateur.
    Pour le moment ça marche : car le controleur est ds le même package que l'ihM mais il faut mieux le sortir ds un autre package (model).

    Quelqu'un a t'il une solution ?

    Merci;

  2. #2
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Citation Envoyé par yanis97
    - IHM doit faire un import du controleur pour appeller “actionPerformed” du controleur
    Normalement, non : le contrôleur implemente seulement un ActionListener, et l'IHM ne connait du contrôleur que l'identité ActionListener. Donc l'IHM ne connait pas le contrôleur, seulement le Listener, même si c'est le même objet.

    Je sais bien que la réalité est souvent un peu plus compliquée, mais au vue de ce que tu nous dis, tu peux faire comme je te dis

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Par défaut
    Salut;

    Donc la logique fait également que le le contröleur ne connait pas l'iHM pour lui forwarder des data ?, par consequent il faut une autre interface entre le controleur et l'IHM ?


    Merci;


    Citation Envoyé par spekal
    Normalement, non : le contrôleur implemente seulement un ActionListener, et l'IHM ne connait du contrôleur que l'identité ActionListener. Donc l'IHM ne connait pas le contrôleur, seulement le Listener, même si c'est le même objet.

    Je sais bien que la réalité est souvent un peu plus compliquée, mais au vue de ce que tu nous dis, tu peux faire comme je te dis

  4. #4
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Citation Envoyé par yanis97
    Donc la logique fait également que le le contröleur ne connait pas l'iHM pour lui forwarder des data ?, par consequent il faut une autre interface entre le controleur et l'IHM ?
    La logique, peut être. Swing, non.

    Le contrôleur - qui est plutôt un écouteur chez swing (Listener) - connaît le contrat (l'interface) que comprend la vue pour alerter d'un événement. La différence listener / contrôleur est importante, parce que la plupart du temps les listeners ne doivent pas modifier ce qu'ils écoutent.

    Tu as des tas d'infos très précieuses sur tout ça dans Writing Event Listeners.

    Par exemple, soit le plus habituel des écouteurs, le ActionListener. Un contrôleur qui voudrait écouter un bouton va mettre en oeuvre cette interface. Par là, il dépend donc de la GUI, mais seulement au niveau du contrat ; il peut nommer son listener comme il le veut, lui faire faire ce qu'il veut, du moment qu'il implémente ActionListener.

    Lorsque le bouton sera cliqué, le bouton consultera la liste de ses écouteurs, mais la seule chose qu'il sait d'eux est que ce sont des ActionListener. De cette façon, il pourra déclencher la méthode actionPerformed. Qui est exactement cet ActionListener, que fait-il dans cette méthode, le bouton n'en sait rien (surtout que, la plupart du temps, le listener est une classe interne package private).

    Il y a donc, entre listener et vue, une dépendance au niveau du contrat, mais une indépendance au niveau de la mise en oeuvre.

    Et ainsi de suite.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Par défaut
    Bonjour;

    OK je suis d'accord avec toi mais la question que j'ai posé c'est dans la'utre sens COntroller => Vue.
    C'est comment le controler lorsqu'il recoit le resultat de l'opération (action) par exemple récupérer dans une DB la liste des personnes pour les afficher.
    Donc le controller reçoit un arrayList de type d'objet Personne, maintenant il doit transmettre cette liste à la vue pourqu'elle celle-ci l'affiche à l'utilisateur ?
    DOnc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Controller implements ActionListener {
    .....
    private daoPersonne;
    public void actionPerformed(ActionEvent e) {
      if e = "Boutton(OK)" alors List pers = daoPersonne.getPersonneList()
     else ...
    //comment transmettre la liste "pers" à la vue ?
     
    }
    Faut'il créer une instance d'une autre interface pour envoyer la liste ?

    Merci;





    Citation Envoyé par spekal
    La logique, peut être. Swing, non.

    Le contrôleur - qui est plutôt un écouteur chez swing (Listener) - connaît le contrat (l'interface) que comprend la vue pour alerter d'un événement. La différence listener / contrôleur est importante, parce que la plupart du temps les listeners ne doivent pas modifier ce qu'ils écoutent.

    Tu as des tas d'infos très précieuses sur tout ça dans Writing Event Listeners.

    Par exemple, soit le plus habituel des écouteurs, le ActionListener. Un contrôleur qui voudrait écouter un bouton va mettre en oeuvre cette interface. Par là, il dépend donc de la GUI, mais seulement au niveau du contrat ; il peut nommer son listener comme il le veut, lui faire faire ce qu'il veut, du moment qu'il implémente ActionListener.

    Lorsque le bouton sera cliqué, le bouton consultera la liste de ses écouteurs, mais la seule chose qu'il sait d'eux est que ce sont des ActionListener. De cette façon, il pourra déclencher la méthode actionPerformed. Qui est exactement cet ActionListener, que fait-il dans cette méthode, le bouton n'en sait rien (surtout que, la plupart du temps, le listener est une classe interne package private).

    Il y a donc, entre listener et vue, une dépendance au niveau du contrat, mais une indépendance au niveau de la mise en oeuvre.

    Et ainsi de suite.

  6. #6
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Citation Envoyé par yanis97
    //comment transmettre la liste "pers" à la vue ?
    Tu le transmets au modèle de ta vue.

    Souvent, avec les listes, on utilise une JTable. Les JTable ont leur modèle de données, qui est javax.swing.table.TableModel.

    Et souvent, on a pas de JTable, mais tout autre chose ; on utilise alors le modèle de cet autre chose, modèle que l'on peut faire soi-même ; et, quand on est fénéant, on ne fait pas de modèle, mais on envoie directement à la vue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/10/2006, 04h48
  2. [vb.net] lancer impression dans un service
    Par Invité dans le forum Windows Forms
    Réponses: 4
    Dernier message: 07/06/2006, 15h20
  3. Faire un SendMessage dans un service
    Par Lyntern dans le forum C++Builder
    Réponses: 1
    Dernier message: 04/06/2006, 23h07
  4. DLL dans un service
    Par michelci dans le forum Langage
    Réponses: 5
    Dernier message: 05/07/2005, 17h50
  5. Réponses: 2
    Dernier message: 02/08/2004, 17h34

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