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

avec Java Discussion :

question d'implementation mvc


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Points : 18
    Points
    18
    Par défaut question d'implementation mvc
    Bonjour,

    Je voudrais avoir vos opinions sur un détail d'implementation du modèle mvc. Il s'agit de savoir si la vue doit soit étendre ou contenir un composant graphique. Je m'explique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class Vue extends JFrame{
    ...
    }
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class Vue{
    JFrame vue;
    ...
    }

  2. #2
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    Personnellement, je l'étend. Je trouve le code plus lisible.
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Par exemple si MaVue étend JFrame je ne peux pas passer l'instance de la classe englobante en argument dans une fonction appelée dans un contrôleur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class MaVue extends JFrame{
       JButton bouton;
       public MaVue(){
          bouton = new JButton("click me");
          bouton.addActionListener(new ActionListener(){
             public void actionPerformed(ActionEvent e){
                // Je ne peux pas accéder MaMethode dans la classe englobante!
                // maMethode(this); ne marchera pas car this est
                // une réference à une instance d'ActionListener
             }
          }
       }
       public void maMethode(MaVue cetteInstanceDeMaVue){ ... }
    }
    à moins de ruser comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class MaVue extends JFrame{
       MaVue vue;
    ...
    }
    Mais cela vaut il encore la peine d'étendre JFrame dans ce cas?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 79
    Points : 73
    Points
    73
    Par défaut
    Je suis pour ne pas étendre la JFrame car ça te bouffe la seule possibilité d'héritage Java que tu as ....

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Tu étends JFrame que si ta classe fille apporte de nouveaux comportements à JFrame. Si c'est pour y faire des choses qui n'ont pas de rapport direct avec une JFrame, choisis la composition.

    Pour ton problème d'accès à ta variable, si tu ne passes pas par une classe anonyme, tu n'auras plus le problème.

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Aaaah je peux faire comme ça aussi!
    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
    public class MaVue extends JFrame{
       JButton bouton;
       public MaVue(){
          bouton = new JButton("click me");
          bouton.addActionListener(new ActionListener(){
             public void actionPerformed(ActionEvent e){
                maMethode(getInstance()); // Ca doit marcher :P
             }
          }
       }
       public void maMethode(MaVue cetteInstanceDeMaVue){ ... }
       public MaVue getInstance(){
          return this;
       }
    }

  7. #7
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    Tu peux faire ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void maMethode(JFrame frm){ ... }
    et ensuite pour l'appeler

    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Non ça ne marche pas car this réfere à l'instance du controleur dans lequel cette methode est appelée (quand appelée depuis un controleur) et non à une instance de JFrame.

  9. #9
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    Citation Envoyé par sirgzu Voir le message
    Non ça ne marche pas car this réfere à l'instance du controleur dans lequel cette methode est appelée (quand appelée depuis un controleur) et non à une instance de JFrame.
    Sur de ce que tu dis ??

    je viens de faire un test

    j'ai une classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class Test extends JFrame
    dans cette classe j'ai 2 metodes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void LstComp(JFrame frm){...}
    et dans une autre je fais

    Et surprise, ca marche sans problème.
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  10. #10
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Si tu essaies mon sscce suivant tu verras que ça ne marche pas. Si tu appeles tes fonctions depuis la meme classe, bien sur ça marche. Le problème se pose lorsque tu appelles ta fonction depuis une classe interne comme par exemple ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import javax.swing.*;
       public class MaVue extends JFrame{
       JButton bouton;
       public MaVue(){
          bouton = new JButton("click me");
          bouton.addActionListener(new ActionListener(){
             public void actionPerformed(ActionEvent e){
                maMethode(this); // Erreur à la compilation, je suis dans une classe interne
             }
          }
       }
       public void maMethode(MaVue cetteInstanceDeMaVue){}
    }
    Sinon y a t'il d'autres raisons de (ou de ne pas) étendre des objets graphiques?

  11. #11
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    autant pour moi. Je n'avais pas vu le ActionListener et donc une autre classe.

    Tu as parfaitement raison. Dans ce cas ton implémentation est bonne .
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Quand tu es dans une classe interne, tu peux lever l'ambiguïté de "this" en le préfixant par la classe dont tu souhaites récupérer l'instance courante.

    Donc dans ton cas ça donne, si j'ai bien compris :

    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
    public class MaVue extends JFrame {
      JButton bouton;
     
      public MaVue() {
        bouton = new JButton("click me");
        bouton.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            maMethode(MaVue.this);
          }
        });
      }
     
      public void maMethode(MaVue cetteInstanceDeMaVue) {
      }
    }

  13. #13
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Ah en effet ça marche... Il me semblait pourtant avoir déjà testé ça et que ça marchait pas mais bon... c'était peut être une vieille version de Java :oP

    Bon merci pour à tous pour vos conseils, je ferme.

    A plus!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question sur le MVC, conception et objet metier
    Par magiczouf dans le forum MVC
    Réponses: 0
    Dernier message: 17/07/2009, 11h02
  2. [Méthode] Des question à propos du MVC
    Par NiRaDo dans le forum MVC
    Réponses: 4
    Dernier message: 20/04/2009, 19h42
  3. Questions d'architecture (MVC)
    Par pingu dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 02/04/2009, 16h11
  4. Petite question sur le MVC
    Par Mogwaï dans le forum MVC
    Réponses: 5
    Dernier message: 21/08/2008, 16h38
  5. Question sur le MVC
    Par Invité dans le forum MVC
    Réponses: 2
    Dernier message: 12/05/2007, 17h09

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