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 :

[Swing] Modèle multiple (Document + ComboBoxModel+ ListModel)


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [Swing] Modèle multiple (Document + ComboBoxModel+ ListModel)
    Bonjour,

    Je voudrais réaliser un modèle unique pour tout une vue. Cette vue est constituée de JTextField, JCombobox et JList. Bon jusque la ça va, je peux implémenter les interfaces et tout coder moi même ou faire de la composition ou les deux (implémentation des interfaces et délégation des méthodes interfaces au objet de la composition).

    Le problème c'est que j'ai trois JTextComponent et deux JList.

    Ma question :
    Le modèle peut-il récupérer une quelconque information sur le composant qui lui est associé ? Par définition du modèle MVC, je dirais que non mais bon..

    Mon but serait alors d'implémenter les interfaces voulue et d'agir différemment en fonction du composant..
    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
     
    class ModeleMultiple implements Document, ComboboxModel, ListModel {
     
       /* Implementation de l'interface Document (oui je sais le return court circuite mon else-if .. */
       //...
      @Override
       public String getText(int offset, int length) {
          if ( composantDestination.equals(textFieldNom) ) {
             return nom;
          } else if( composantDestination.equals(textFieldAge) {
             return age;
          } else {
             //..
          }
       }
     
    }
    Malheureusement je ne vois pas comment faire "composantDestination.equals(textFieldNom)" car je n'ai pas accès au composant de destination.

    L'un d'entre vous à t'il une idée ?

    Merci
    Dernière modification par Invité ; 07/12/2007 à 10h13.

  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
    Il ne faut effectivement pas modifier un modèle en fonction des spécificités d'un affichage graphique. Enfin... normalement.

    Ici, je verrais deux alternatives :

    - ces spécificités reflètent vraiment une propriété des données ; en ce cas, tu peux rajouter une méthode ou autre au modèle, et faire avec.

    - ces spécificités sont justes des facilités d'usage ; en ce cas, il faut que tu crées des nouveaux composants graphiques qui les mettront en oeuvre, sans modifier le modèle de base, par exemple en créant une classe quihérite de JList etc.

  3. #3
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par Blaise1 Voir le message
    Ma question :
    Le modèle peut-il récupérer une quelconque information sur le composant qui lui est associé ? Par définition du modèle MVC, je dirais que non mais bon..
    Non en effet... Sinon, le modèle serait dépendant la vue...

    As-tu besoin d'une unique instance de ton modèle ? Si ce n'est pas le cas, tu peux tout simplement passer un paramètre quand tu construis le modèle qui va indiquer de quel type est le modèle (age-nom).

    Mais je suis pas que ce genre de modèle soit la meilleure chose à faire...

  4. #4
    Invité
    Invité(e)
    Par défaut
    En fait j'ai une vue qui doit représenter un bean (en très gros c'est ça) mon but est de sauver les informations de mon bean des qu'elles sont modifiées (je n'ai pas de bouton sauver).
    Donc mon modèle est le meilleur endroit pour faire cela.

    Mon modèle doit être unique car il centralise toutes les propriétés possibles de mon bean.
    Baptiste que ferais tu alors en sachant que le bean doit toujours être synchronisé avec le contenu de le DB ?

  5. #5
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Personnellement, je considère que ça reste un modèle de la couche graphique (Swing dans notre cas), ce modèle est quand même lié à la couche graphique étant donné qu'il en utilise les interfaces, mais il permet de séparer, toujours dans la couche graphique, la partie données de la partie affichage, ce qui est très bien.

    Ce que je fais en général, c'est que j'ai un modèle général complétement dissocié de l'interface graphique et ensuite mes modèles "graphiques" utilisent ce modèle global pour récupérer des informations.

    Je ne sais pas si c'est la meilleure façon de faire, mais en général, ca fonctionne pas mal. Pour les modifications, il suffirait de répercuter les événement des modèles graphiques dans le modèle global pour que tout matche.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ben oui moi j'étais partit sur cette idée aussi mais mon responsable pas trop..
    En même temps le modèle pour les JTextComponent est un Document et il n'y à pas moyen de savoir lorsque l'édition est finie, et je me vois mal faire un Update à chaque fois que l'utilisateur change une lettre du nom..

    Je ne vois vraiment pas comment faire ça proprement.

  7. #7
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par Blaise1 Voir le message
    Ben oui moi j'étais partit sur cette idée aussi mais mon responsable pas trop..
    En même temps le modèle pour les JTextComponent est un Document et il n'y à pas moyen de savoir lorsque l'édition est finie, et je me vois mal faire un Update à chaque fois que l'utilisateur change une lettre du nom..

    Je ne vois vraiment pas comment faire ça proprement.
    L'édition est finie quand le focus est perdu non ? Tu pourrais utiliser un focus listener pour mettre à jour les données de ton modèle lors de la perte de modèle.

Discussions similaires

  1. [VBA-W] enregistrement de modèle de document
    Par Speedrman dans le forum VBA Word
    Réponses: 3
    Dernier message: 03/04/2007, 20h20
  2. [POI]Utiliser des modèles de document, c'est possible ?
    Par hugo123 dans le forum Documents
    Réponses: 5
    Dernier message: 04/09/2006, 12h52
  3. Modéliser des modèles de documents
    Par raoudi57 dans le forum Débuter
    Réponses: 5
    Dernier message: 10/11/2005, 20h23
  4. [Eclipse 2.1.2] Créer un modèle de document/fichier
    Par iubito dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 26/01/2005, 11h47
  5. Comment réaliser des modèles de documentations avec XML ?
    Par Dams76 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 29/08/2003, 02h15

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