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

Composants Java Discussion :

Placement d'observers, conception Objet


Sujet :

Composants Java

  1. #1
    Membre actif Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Points : 265
    Points
    265
    Par défaut Placement d'observers, conception Objet
    Bonjour ,

    Je développe actuellement une interface graphique comme "exercice" pour assimiler le Java.
    Mon application se décompose en 3 JPanels, chaque JPanel contenant une JToolBar et un JList.

    L'idée, c'est de faire un petit DataManager, ou
    • la première liste contient les Catégories
    • la deuxième liste les Artistes de chaque catégorie
    • et la dernière les Œuvres de chaque artistes.

    Note : Je précise que je ne DOIS pas utiliser de base de données, mais des collections Java, afin de les maitriser.

    J'ai organisé mes données comme ceci :
    Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     private List<String> listCategories;
     private Map<String, List<String>> listArtists;
     private Map<String, List<String>> listWorks;

    que j'ai initialisés :
    Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    this.listCategories = new ArrayList<String>();
    this.listArtists = new HashMap<String, List<String>>();
    this.listWorks = new HashMap<String, List<String>>();

    Donc, en résumé, ma liste listCategories contient les catégories directement,
    ma liste listArtists contient en clé, la catégorie et en valeur la liste des artistes et ma liste listWorks contient en clé les artistes et en valeur la liste des œuvres associées.

    Dans ma Toolbar j'ai 3 boutons qui me permettent :
    • d'ajouter
    • de supprimer
    • de modifier

    les valeurs de mes listes.

    Pour l'instant j'ai utilisé le pattern Observer afin de lier mes listes, et d'afficher la liste correspondante à la catégorie en amont et cela fonctionne à merveille. Mais je suis confronté au problème de l'ajout ou de la modification.
    Problème :
    Je ne sais pas comment placer mes observers, afin d'avoir accès à la valeur sélectionnée de toutes mes listes.
    Du coup, je fais écouter le panel sur sa toolbar associée,
    Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    this.categoryPanel.toolbar.addToolbarObserver(this.categoryPanel);
    this.artistPanel.toolbar.addToolbarObserver(this.artistPanel);
    ...
    mais en faisant ainsi, je n'ai accès qu'à la valeur sélectionnée de la liste du panel en question ... pas des autres.

    Note : Tous les composants contenus dans un composants sont des attributs de celui-ci.

    Désolé mon problème est spécifique et complexe, je posterai bien un diagramme de classe pour plus de clarté ... Merci à tous ceux qui se pencheront sur mon problème pour me dire comment procéder pour gérer mon ajout et ma modification dans mes listes.

  2. #2
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Salut,

    Bon si j'ai bien compris, tu as 3 JPanel que tu as codés dans 3 classes différentes, et qui contiennent chacun leurs propres attributs (JToolBar et la JList). Ces classe sont alimentés par une classe JFrame contenant ta structure de donnée (les 3 liste/Maps).

    Comme tu as un mécanisme Observer pour notifier du changement d'une valeur de tes listes, pourquoi ne pas s'en servir ?

    Tu pourrais rajouter 3 attributs pour garder l'état de chacune des listes.

    Si une valeur est modifié
    Je notifie du changement
    Je garde cette valeur dans une variable
    Du coup à tout instant tu as accès au trio gagnant et tu peux modifier ce que tu veux.

    Il doit surement y avoir mieux à faire mais il faudrait plus d'infos sur comment tu as implémenter tes classes

    Cdt.

  3. #3
    Membre actif Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Points : 265
    Points
    265
    Par défaut
    Ok merci,

    En gros, mes classes sont implémentées comme ceci :



    Le problème c'est que quand j'ajoute mes observers au niveau de la classe mère de mes JPanels, je ne peux récupérer que la valeur selectionnée de la JList correspondante au panel actuel.


    Donc j'ai vraiment un souci de conception sur ma gestion des évenements des clics sur les bouton de ma toolbar je pense.

    EDIT : J'ai fait une bétise, ma classe toolbar n'est pas implémentée dans les JPanels fils mais dans la classe mère. Ce sont donc les mêmes.

  4. #4
    Membre actif Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Points : 265
    Points
    265
    Par défaut
    Citation Envoyé par Nico02 Voir le message
    Comme tu as un mécanisme Observer pour notifier du changement d'une valeur de tes listes, pourquoi ne pas s'en servir ?

    Tu pourrais rajouter 3 attributs pour garder l'état de chacune des listes.
    Le problème dans ce que tu me proposes (je ne sais pas si c'en est vraiment un) est le suivant :

    Mon interface Observer est implémentée dans ma classe abstraite mère de mes 3 JPanels (celle qui contient leur structure JList, JToolbar, JDialog, la liste de ses observers ...), donc ma méthode onUpdate(), qui est appelée à chaque clic est redéfinie dans chaque classe fille (dans les trois JPanels), de manière à appeler la bonne méthode (la récupération de la liste en fonction de la catégorie en amont).

    Or, depuis ces composants, je peux uniquement connaitre la valeur sélectionnée sur la liste actuelle, et je ne peux pas récupérer la valeur sélectionnée des deux autres listes.

    Donc j'aurais beau déclarer 2 attributs dans mes classes categoryPanel, artistPanel et workPanel, je ne pourrais pas les mettre à jour avec les deux autres listes.

Discussions similaires

  1. conception objet java
    Par gdpasmini dans le forum Langage
    Réponses: 10
    Dernier message: 26/01/2007, 16h11
  2. Conception objet d'un Mario-like
    Par alex6891 dans le forum Développement 2D, 3D et Jeux
    Réponses: 26
    Dernier message: 14/10/2006, 09h09
  3. [2.0][OOP] conception objet
    Par CUCARACHA dans le forum Framework .NET
    Réponses: 8
    Dernier message: 12/10/2006, 09h27
  4. [Méthodes]Tuto conception objet
    Par Ethylene dans le forum Méthodes
    Réponses: 3
    Dernier message: 24/08/2006, 22h31
  5. [Conception] Objet User
    Par Invité dans le forum Général Java
    Réponses: 10
    Dernier message: 14/03/2006, 11h54

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