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 :

[JComboBox] interface MutableComboBoxModel


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Sarrus
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2005
    Messages : 180
    Par défaut [JComboBox] interface MutableComboBoxModel
    Re bonjour, toujours sur mon probleme de comboBox...

    Je crée un objet JComboBox, vide par défaut, ou l'utilisateur rajoute au fur et à mesure des éléments à la volée, or apparement ce n'est pas possible à partir de la méthode addItem, ça marche que à la création...

    Il faudrait apparement passer par l'interface MutableComboBoxModel, ou la je pourais meme mettre des listeners sur mon ArrayList d'éléments à ajouter... Mais je ne comprends pas comment ça marche l'interface... Dois-je quand meme instancier ma JComboBox, à quel moment intervient l'interface ? Que de mysteres...

    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Par défaut
    C pas bien compliqué. Tu instancies un modèle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DefaultComboboxModel model = new DefaultComboboxModel();
    Tu ajoutes tes éléments dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    model.addElement(element);
    Et tu applique ton model à ton JComboBox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JComboBox jcb = new JComboBox(model);
    Et quand tu veux ajouter un élément :
    tu récupère le modèle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    model = jcb.getModel();
    et tu ajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    model.addElement(element);
    il me semble que c tout. J'oublie peut etre une étape à la fin.

  3. #3
    Membre confirmé Avatar de Sarrus
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2005
    Messages : 180
    Par défaut
    OK je vois comment faire, mais est-on obligé de reinstancier la JcomobBox apres ? si elle existe deja sur la Frame, on peut pas simplement la reactualiser ?

    J'ai rien dit...

  4. #4
    Membre confirmé Avatar de Sarrus
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2005
    Messages : 180
    Par défaut
    je vais devenir folle avec ce truc... Bon, précision il faut caster le JComboBox.getMOdel() avec un (DefaultComboBoxModel)

    De plus : j'ai maitnenant un autre probleme, il me retourne un NullPointerException lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    model=(DefalutComboBoxModel)jcb.getModel();

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Par défaut
    Tu es bien matinale.Je regarde ca vite fait et je te dis ce qui va pas.
    Mais si getModel te renvoi un nillPointerException ben c que tu lui a pas encore mis de model normalement.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Par défaut
    Bon je pense que ca ira plus vite si je te donne un exemple d'utilisation des DefaultComboBoxModel. Y a un JComboBox auquel tu peux rajouter des éléments à partir du JTextField (saisi un mot et appui sur entrer). Et en sup je t mis une utilisation d'un ListCellRenderer.

    Mais sache que l'utilisation d'un model n'est pas obligatoire, un addItem directement sur le JcomboBox marche aussi.

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
    public class myJFrame extends JFrame {
     
    	JComboBox jcb = new JComboBox();
    	DefaultComboBoxModel model = new DefaultComboBoxModel();
    	JTextField jtf = new JTextField(10);
     
        public myJFrame() {
            super();
            model.addElement(new MyItem(Color.BLUE,"toto"));
            model.addElement(new MyItem(Color.RED,"titi"));
            model.addElement(new MyItem(Color.GREEN,"tata"));
            model.addElement(new MyItem(Color.YELLOW,"tutu"));
            jcb.setModel(model);
            jcb.setRenderer(new MyListCellRenderer());
            jtf.addActionListener(new ActionListener(){
            	public void actionPerformed (ActionEvent e) {
            		DefaultComboBoxModel mod = (DefaultComboBoxModel)jcb.getModel();
            		mod.addElement(new MyItem(Color.BLACK,jtf.getText()));
            		jcb.updateUI();
            	}
            });
            getContentPane().setLayout(new GridLayout(2,1));
            getContentPane().add(jcb);
            getContentPane().add(jtf);
            setSize(200,200);
            setVisible(true);
        }
     
        public static void main (String arg[]) {
        	myJFrame frame = new myJFrame();
        }
     
     
    }
     
    class MyListCellRenderer extends DefaultListCellRenderer {
    	public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
    		super.getListCellRendererComponent(list,value,index,isSelected,cellHasFocus);
     
    		MyItem mi = (MyItem)value;
    		setForeground(mi.getColor());
    		setText(mi.getText());
     
    		return this;
    	}
     
    }
     
    class MyItem {
    	Color colorItem;
    	String textItem;
     
    	public MyItem(Color c, String s) {
    		colorItem = c;
    		textItem = s;
    	}
     
    	public Color getColor() {
    		return colorItem;
    	}
     
    	public String getText() {
    		return textItem;
    	}
    }

  7. #7
    Membre confirmé Avatar de Sarrus
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2005
    Messages : 180
    Par défaut
    c'est bon ca marche !! en fait ca ne sert a rien de refaire un setModel apres que l'on a rajouté une var, le jcb et le model sont liés, ils se mettent à jour constamment !!!

    J'ai maintenant un autre probleme : j'ai créé une classe Variable avec un name, unité, value... Et à chaque fois que l'utilisateur va ajouter une variable, ca va instancier un objet... Mais comment puis-je faire pour que le nom de l'objet change à chaque fois ? ne devrais-je pas plus utiliser un tableau ? Comment faire une table avec plusieurs champs ?

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Par défaut
    Je n'ai pas vraiment compris ce que tu voulais faire.
    Dans quoi ajoutes-tu tes variables?
    Quel est le rapport avec les JComboBox?
    Pour faire une table avec plusieurs champs, à mon avis le mieux serai de l'implémenter toi même (par exemple un objet maTable avec plusieurs tableau comme attribut, un tableau par champ)

  9. #9
    Membre confirmé Avatar de Sarrus
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2005
    Messages : 180
    Par défaut
    c bon barbu, g trouvé, j'ai reposté pour ce probleme...

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

Discussions similaires

  1. Appel de JComboBox en dehors de la classe de l'interface.
    Par scipionh dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 06/05/2009, 18h25
  2. [VB6] [Interface] ComboBox à plusieurs colonnes
    Par mtl dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/03/2004, 17h35
  3. Couleur d'une JComboBox disabled
    Par ced dans le forum Composants
    Réponses: 6
    Dernier message: 06/01/2004, 15h33
  4. [VB6] [Interface] Horloge 7 segments
    Par selenay dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 07/10/2002, 16h15
  5. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27

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