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 :

Probleme sur un ComboBoxModel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 Probleme sur un ComboBoxModel
    Salut,

    J'ai voulu faire un JComboBox avec des objets spécifique dedans, donc je me suis lancé dans un ComboBoxModel.
    Pour l'instant j'ai 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    public class EcrituresComboBox extends AbstractListModel implements ComboBoxModel {
     
    	private List<Ecriture> listEcriture = new ArrayList<Ecriture>();
     
            public EcrituresComboBox(){
    	}
     
            public EcrituresComboBox(List<Ecriture> liste){
    		this.listEcriture = liste;
    	}
     
    /**********Methodes obligatoires*************/
    	public void setSelectedItem(Object arg) {
    	}
     
    	public Object getSelectedItem() {
    		return listEcriture.get(0);	
    	}
     
    	public int getSize() {		
    		return listEcriture.size();
    	}
     
    	public Object getElementAt(int arg) {		
    		return listEcriture.get(arg);
    	}
            /**********FIN Methodes obligatoires*************/
     
    	public void addItem(Ecriture uneEcriture){
    		listEcriture.add(uneEcriture);
    	}
    }
    Comme vous pouvez le voir j'ai rajouté addItem parce que je m'en sers, les autres sont obligatoires.
    Ce que je voudrais savoir c'est comment on gère les get /set selectedItem et si le reste est ok.
    [Edit]
    Et savoir comment gérér proprement une ligne vide en premier et que mon JComboBox sera editable.
    [/Edit]

    Merci!

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,

    pour la méthode addItem, n'oublie pas d'appeler super.fireElementAdded(...) pour actualiser l'affichage après l'ajout de l'élément dans la liste. Sinon, tu auras beau ajouter des éléments, l'affichage ne réagira pas.

    Pour insérer une ligne vide, tu as plusieurs choix :
    - la méthode getElementAt renvoie un objet Ecriture vide si i=0, et le contenu de la liste à i - 1 sinon (modifier getSize aussi)
    - tu insères une Ecriture vide à la construction du model.
    Dans les 2 cas, il faudra peut-être faire attention lors de l'édition de cette entrée vide.

    Pour éditer, il faut passer par un JComboBoxEditor.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  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
    Salut,

    Je suis parti d'une question trop général, il se peux qu'il existe une méthode plus simple pour résoudre mon problème.

    Ce que j'ai : une JComboBox qui contient des noms de fournisseurs, certains fournisseurs ont des écritures rattachées, si c'est le cas il affiche une JComboBox avec le libelle de l'écriture. Pour l'instant tout ça fonctionne.
    Après lorsque je sélectionne une écriture rattachée je voudrais que les éléments de celle-ci montant, les comptes etc... s'affichent dans les différents éléments de mon formulaire.
    La ou ça va pas : c'est que ce que je récupère c'est un libelle un String qui n'est pas unique, donc je ne peux pas rechercher l'écriture rattachée. Il me faudrait son identifiant. D'où l'idée de passer en paramètre une list<Ecriture> après dans le getElementAt(int arg) je récupère malist.get(arg) et j'affiche le libelle, via un getLibelle de ma classe Ecriture.
    Mais je vois pas comment fonctionne la méthode getSelectedItem()????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private Object selectedObject = null;
    		public void setSelectedItem(Object item) {
    			selectedObject = item;			
    			fireContentsChanged(this, -1, -1);
    		}
    		public Object getSelectedItem() {
    			return selectedObject.toString();
    		}
    Si je fais comme ca il me renvoie un objet String qui est mon libellé....

  4. #4
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Pardon ! J'avais oublié ta question sur la gestion du get/setSelectedItem !

    Le plus simple dans ton cas c'est de faire comme ça :
    - la classe Ecriture redéfinit la méthode toString() pour retourner ce qui doit apparaître dans la JComboBox (pas super propre, mais ça évite de te taper un Renderer).
    - les méthodes get/setSelectedItem fonctionnent comme ça :
    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
    19
    private Object selectedEcriture;
     
    public Object getSelectedItem() {
      return selectedEcriture;
    }
     
    public void setSelectedEcriture(Object o) {
      if(listEcriture.contains(o)) {
        selectedEcriture = (Ecriture) o;
      }
    }
     
    public void addItem(Ecriture e) {
      boolean added = listEcriture.add(e);
      if(added) {
        int insertionIndex = listEcriture.getSize() - 1;
        fireIntervalAdded(this, insertionIndex, insertionIndex);
      }
    }
    - lorsque la ComcoBox est utilisée (dans le actionPerformed ou le itemStatechanged), tu peux accéder à tous les champs de l'objet sélectionné ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void actionPerformed(ActionEvent e) {
      JComboBox cb = (JComboBox) e.getSource(); //ou e.getComponent(), c'est pareil
      Ecriture ecr = (Ecriture) cb.getSelectedItem(); //la JComboBox appelle elle même son model.
      System.out.println(ecr.getJeSaisPasQuoi()); // on accède aux propriétés de l'objet
    }
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  5. #5
    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 ca marche nickel!!!

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

Discussions similaires

  1. [LG]Probleme sur l'identification de typage
    Par axelmeunier dans le forum Langage
    Réponses: 10
    Dernier message: 19/01/2004, 13h41
  2. Réponses: 3
    Dernier message: 07/04/2003, 20h06
  3. Probleme sur le Fields des fichiers Xmlgram
    Par Sandrine75 dans le forum XMLRAD
    Réponses: 4
    Dernier message: 20/03/2003, 17h09
  4. Probleme sur un AppendChild
    Par Toxine77 dans le forum XMLRAD
    Réponses: 3
    Dernier message: 14/03/2003, 18h25
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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