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 :

JComboBox en modifie une autre


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut JComboBox en modifie une autre
    Salut et Bonne Année!!

    Je cherche des pistes pour le problème suivant.

    J'ai un formulaire avec - 1 JCombobox avec le nom d'un fournisseur.
    et 1 JCombobox avec des écritures quelconque.

    L'utilisateur à le choix entre
    1 choisir un fournisseur si le fournisseur à une écriture rattaché virer le JCombobox actuel et le remplacé par celui qui contient les écritures rattachés ou mieux lister les écritures rattachés au fournisseur en premier et en dessous les écritures quelconque.
    2 choisir une écriture quelconque puis choisir un fournisseur (le rappel des écritures rattachés ne doit pas se faire ou s'il se fait, que l'écriture choisie reste séléctionné).
    Dans tous les cas le libelle doit rester éditable.

    Merci!!

  2. #2
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    et tu bloques sur quoi ?

  3. #3
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    Un des points sur lesquels je bloque c'est au niveau du deuxième JComboBox.
    Si je prends le scénario de choisir le Fournisseur, après avoir perdu le focus sur ce JComboBox je voudrais que le deuxième qui contient les libellées par défaut laisse la place à celui qui contient les libellés des écritures rattachées au Fournisseur choisi.
    Mais le JComboBox ne s'en va pas j'ai essayé .setVisible, .remove le Component de mon panel, mais rien n'y fait il ne s'en va pas alors que dans une classe de test j'ai testé le .setVisible et ça fonctionne bien....
    Donc j'en déduis une erreur de conception pour l'instant mon JCombobox avec les libellés par défaut (celui que je veux remplacer) est déclaré ET affiché au lancement de la page, de plus il est public pour toute la classe.
    Je l'ai mis public pour pouvoir modifier son contenu, par rapport au choix du Fournisseur.

    C'est pour ça que ma question était générale, c'était pour avoir quelques pistes sur comment développer un système comme ca, ou s'il existait des biblis qui gèrent les JComboBox (un peu comme swingx pour les JTable). Si y'a rien de spécial je pense que je résoudrai les problèmes à fur et à mesure.

  4. #4
    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
    Il ne faut pas supprimmer le JComboBox pour le remplacer par un autre, mais il faut plutôt modifier les données contenues dans le modèle du JComboBox, ca me semble beaucoup plus propre...

    Donc, dès que le focus du premier est perdu, tu mets à jour le modèle du deuxième en fonction de la selection du premier.

  5. #5
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    En gros tu as une première cc "fournisseur" et une deuxième "ecriture". Tu souhaiterais d'une part qu'une sélection dans la première modifie en conséquence la deuxième et d'autre part pouvoir sélectionner un truc quelquonque dans la deuxième puis dans la première.
    Dis-moi si je me trompe.
    En fait le coup du listener sur la première pour modifier la deuxième ( cas n°1 ) ne permet pas le cas n°2.
    Personnellement, je rajouterais un bouton "relation" qui lorsqu'il est clické modifie la deuxième cc en fonction de la sélection de la première. A cela il faudrait rajouter un deuxième bouton "annule" pour revenir à la situation originale. Ainsi tu gardes des sélections indépendantes dans les deux cc.

    EDIT grilled : tu peux modifier le contenu en utilisant les méthodes addItem, removeItem etc. -> voir javadoc

  6. #6
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    En faite j'ai un truc comme ca :

    La c'est mon constructor :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listEcritureType = new JComboBox(new EcrituresComboBox(liste));
    Une fois un Fournisseur sélectionné je fait ca :

    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
    18
    //recup des ecritures déjà existante
    		for (int i=0 ;i < listEcritureType.getItemCount()-1; i++){
    			JComboBox cb = (JComboBox) listEcritureType.getComponent(i);
    			listEcriture.add((Ecriture) cb.getSelectedItem()); 
    		}
     
    		//recup les ecritures types rattachées au compte
    		try{
    			newlist = daoEcriture.getAllEcritureParam(unCompteFeur);
    		}catch(BusinessException be){
    			Erreurs.Warning(be);
    		}
     
    		//Concatène les listes
    		for(Ecriture nelmt:newlist)
              listEcriture.add(nelmt);
     
    		EcrituresComboBox model = new EcrituresComboBox(listEcriture);
    En faite je vois pas comment remplacer mon model...

    Avant je faisait listEcritureType=null; et je relancais le constructor avec mon nouveau model.

    [EDIT]J'ai oublié de dire mais j'ai un additem dans mon modèle et j'avais l'exception "Cannot use this method with a non-Mutable data model." en voulant rajouter des object dedans.... J'ai pas trouvé de solution tout de suite donc je suis passé par efface le Combobox et refait.[/EDIT]

  7. #7
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    Citation Envoyé par iohack
    Personnellement, je rajouterais un bouton "relation" qui lorsqu'il est clické modifie la deuxième cc en fonction de la sélection de la première. A cela il faudrait rajouter un deuxième bouton "annule" pour revenir à la situation originale. Ainsi tu gardes des sélections indépendantes dans les deux cc.
    Merci j'ai rajouté un bouton "Annuler" mais par contre je comprends pas trop ton bouton "relation"????

  8. #8
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2
    Par défaut
    Tu dois créer un model de donnée pour ta ComboBox et automatiquement, ta liste contenu dans la comboBox sera modifiée.

  9. #9
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Citation Envoyé par grabriel
    Merci j'ai rajouté un bouton "Annuler" mais par contre je comprends pas trop ton bouton "relation"????
    Le bouton relation, il servirait à mettre à jour la deuxième cc en fonction de ce qui a été sélectionné dans la première.
    En fait c'est lui qui fait ce qui normalement aurait du être fait lors de l'événement "selection" et qui ne peux pas être appliqué dans ton cas.

  10. #10
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    Citation Envoyé par angelx24
    Tu dois créer un model de donnée pour ta ComboBox et automatiquement, ta liste contenu dans la comboBox sera modifiée.
    Citation Envoyé par grabriel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listEcritureType = new JComboBox(new EcrituresComboBox(liste));
    [EDIT]J'ai oublié de dire mais j'ai un additem dans mon modèle ...
    EcrituresComboBox est mon modèle.
    Donc j'ai déjà un model.

    L'erreur "Cannot use this method with..." vient que le addItem() utilisé n'est pas celui définie dans mon modèle... j'ai essayé en faisant un setModel(EcrituresComboBox) sur mon JComboBox ....

    J'utilise des model pour mes JTable et je peux accéder aux methodes défini dans mes model donc je procède pareil pour la JComboBox mais ca marche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    listEcritureType = new JComboBox(new EcrituresComboBox(liste));
    listEcritureType.addItem(uneEcriture);
    le addItem n'est pas celui que j'ai défini dans mon modèle.

  11. #11
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    listeEcriture.getModel().addItem(...)
    sinon c'est la méthode de JComboBox qui est appelée.

  12. #12
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    Merci!!!

    [EDIT]
    J'ai parlé trop vite.... ca ne fonctionne pas!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    listEcritureType = new JComboBox(new EcrituresComboBox(liste));
     
    listEcritureType.setModel(new EcrituresComboBox(liste));
     
    listEcritureType.addItem(uneEcriture);
    //ou 
    listEcritureType.getModel().addItem(uneEcriture);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class EcrituresComboBox extends AbstractListModel implements ComboBoxModel {
    ET pourquoi ca fonctionne pas alors que j'ai fait un setModel??
    ET pourquoi ca fonctionne pas comme les JTable???
    ...[/EDIT]

  13. #13
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Je viens de regarder la javadoc et le "how to use comboboxes", et je vois que tu ne respectes pas ce qui est marqué :
    Note: Be careful when implementing a custom model for a combo box. The JComboBox methods that change the items in the combo box's menu, such as insertItemAt, work only if the data model implements the MutableComboBoxModel interface (a subinterface of ComboBoxModel). Refer to the API tables to see which methods are affected.

  14. #14
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    En faite mon problème ne venait pas du fait que je ne pouvais pas insérer un élément dans mon ComboBox mais je n'accédais pas à la méthode qui le permettais, que ce soit comme ca :
    Citation Envoyé par grabriel
    listEcritureType.addItem(uneEcriture);
    //ou comme ca
    listEcritureType.getModel().addItem(uneEcriture);
    En faisant comme ca c'est passé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((EcrituresComboBox) listEcritureType.getModel()).addItem(uneEcriture);
    avec getModel() il ne récupérait pas mon EcritureComboBox malgré mon setModel() et mon listEcritureType = new JComboBox(new EcrituresComboBox(liste));.

    C'est pour ca que je demandais :
    Citation Envoyé par grabriel
    pourquoi ca fonctionne pas alors que j'ai fait un setModel??
    ET pourquoi ca fonctionne pas comme les JTable???
    Merci pour ton aide!!!

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

Discussions similaires

  1. variable qui se modifie quand on en modifie une autre
    Par 5kippy dans le forum Débuter
    Réponses: 4
    Dernier message: 22/08/2008, 18h00
  2. Modifier une autre table dans un trigger
    Par Mister Nono dans le forum SQL
    Réponses: 4
    Dernier message: 18/09/2007, 12h12
  3. [Excel VBA]fonction dans une cellule qui modifie une autre cellule
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/01/2007, 17h43
  4. Réponses: 1
    Dernier message: 02/06/2006, 13h51
  5. [JCombobox] modif d'une jcombobox par rapport à une autre
    Par The Wretched dans le forum Composants
    Réponses: 2
    Dernier message: 21/03/2005, 10h35

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