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 :

synchronisation de JList dans une appli (avec ou sans static)


Sujet :

Composants Java

  1. #1
    Membre actif
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Points : 268
    Points
    268
    Par défaut synchronisation de JList dans une appli (avec ou sans static)
    Bonjour,

    J'ai un petit soucis avec les JLists (en faite une seule mais ça m'occupe... ).

    Je souhaite utiliser pour la navigation dans mon appli une JList.
    La fenêtre principale est un JFrame dans lequel est inclu un JPanel incluant lui même (entre autre) un JTabbedPane.

    Chaque JPanel inclus dans le JTabbedPane correspond à une phase différente de l'application entre lesquelles ou peut "voyager".

    Ces phases différentes ont néanmoins une fonctionnalité commune qui est la fonctionnalité de navigation pour laquelle j'utlise la fameuse JList.
    Pour information, cette JList est inclus dans une classe entendant JPanel que j'utilise pour chacun des JPanels du JTabbedPane.

    Je souhaite que tout se passe comme s'il n'y avait qu'une instance de la JList, je l'ai donc déclarée static.

    Dans ce cas de figure, seul un JPanel l'affiche correctement (les autres ne l'affichant pas). Néamoins une modification de la JList impacte bien l'ensemble des JPanes (et vis versa).
    Il va sans dire que lorsque je ne déclare pas la JList en static tout s'affiche correctement mais de manière est déssynchronisée.

    Après reflexion je me dis qu'une JList est un composant graphique (avec des données internes spécifiques à son affichage) et donc qu'il ne peux pas être partagé entre plusieur JPanes.

    Je pense donc remonter une alerte dans la méthode valueChanged à un singloton qui remettrai à jour l'ensemble des JLists qui se serraient enregistrées auprès de lui.

    Mais avant de me lancer je voudrai être sûr qu'il n'y a pas une méthode plus simple et déjà toute prête (comme c'est généralement le cas à chaque fois que je me lance dans le codage de ce genre de mécanisme ).

    Si vous avez une idée je suis preneur!

    merci à tous pour votre attention en espérant ne pas vous avoir perdu dans ma foret de JPanes.
    S'il n'y a pas de solutions, il n'y a pas de problème.

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

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Oui, il y a déja quelque chose de fait, il faut utiliser un modèle.

    Le modèle va contenir les données et ensuite tu relies les JList au même modèle et elles seront synchronisées

    Tu peut aller voir le tutorial de sun pour plus d'infos.

  3. #3
    Membre actif
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Points : 268
    Points
    268
    Par défaut
    Je ne l'avais pas précisé pour éviter de faire trop long mais j'utilise déjà un modèle, lui aussi en static ce qui ne me sert pas à grand chose d'ailleurs puisque le modèle n'évolue pas pour l'instant.

    Mon problème est de faire évoluer les JLists de manière synchronisée alors que le modèle lui n'évolue pas. Typiquement le changement d'un item sélectionné qui dépend seulement de la JList et pas du modèle.

    Il est vrai que je peux artificiellement modifier le modèle et grâce à un ListDataListener remettre à jour les JLists. c'est une autre possibilité que j'ai envisagé mais ça ne me semble pas très orthodoxe.
    S'il n'y a pas de solutions, il n'y a pas de problème.

  4. #4
    Membre actif
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Points : 268
    Points
    268
    Par défaut Oui, je sais c'est sale!
    Bon j'ai truc qui marche! C'est sale... mais ça marche.

    Comme mon problème essentiel est de synchroniser mon index de selection et comme il me semble qu'une JList static c'est pas top, je mémorise l'index de l'élément sélectionné dans une variable static dans la méthode valueChanged.
    Pour affecter cette la valeur mémorisée dans cette nouvelle variable à l'ensemble des JLists, plutôt que de propager la mise à jour j'ai redéfini la méthode paint de mon composant encapsulant la JList de manière à effectuer la mise à jour avant d'appeler super.paint().

    Bon c'est vrai c'est dégueu mais ça à deux avantages:
    -c'est court (5 lignes de codes en plus) .
    -c'est facile à comprendre donc facile à maintenir .

    maintenant s'il y a une méthode courte, simple et élégante je suis preneur .
    S'il n'y a pas de solutions, il n'y a pas de problème.

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

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Je pense que tu devrais réussir à pouvoir faire quelque chose avec le DefaultListSelectionModel.

  6. #6
    Membre actif
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Points : 268
    Points
    268
    Par défaut Respect!
    Ok, je ramasse mes bricolages...

    Avec une DefaultListSelectionModel c'est rapide, propre et efficace.

    Bon j'en tire comme leçon qu'un modèle peut en cacher un autre.
    Quand tu me parlais de modèle, je pensais au DefaultListModel que j'avais effectivement mis en place pour synchroniser mes données, mais j'ai pas pensé une seconde au DefaultListSelectionModel.
    Swing c'est quand même bien foutu!

    Enfin mieux vaut une humilation publique plutôt qu'un vieux bout code tout crade qui traine dans un coin, donc je ne regrette pas d'avoir posé la question.

    Un grand merci!
    S'il n'y a pas de solutions, il n'y a pas de problème.

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

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par JMLLB
    Swing c'est quand même bien foutu!
    En effet, Swing est très bien fait niveau MVC, donc tu as très souvent des modèles que tu peut utiliser

    Sinon, c'est pas une humiliation, c'est normal d'apprendre, tout le monde est passé par là un jour

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/04/2014, 10h34
  2. Réponses: 0
    Dernier message: 03/02/2011, 13h54
  3. Fuite mémoire dans une appli dev avec vc++6
    Par devconf77 dans le forum Windows
    Réponses: 1
    Dernier message: 26/08/2008, 08h58
  4. Se servir du login/passwd window dans une appli
    Par ericb dans le forum Windows
    Réponses: 8
    Dernier message: 26/05/2004, 17h34
  5. Déployer une appli avec SQL SERVER
    Par tiboleo dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 15/10/2003, 14h29

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