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 :

Ajouter une ligne dans un Jlist


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut Ajouter une ligne dans un Jlist
    Bonjour,

    Je cherche a ajouter une ligne dans une Jlist qui est remplie par un arrayList
    J ' ai tente ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void addLigne(Object value) {
     
     
            this.addElement((String) value);
            System.out.println(value);
     
            int rowIndex = messages.size()-1;
            fireIntervalAdded(messages, rowIndex, rowIndex);
     
        }
    mais ca ne fonctionne pas

    mon modele est le suivant

    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
    public class ListesPersonnalisesPanelAppel extends DefaultListModel{
    	private  ArrayList<Messages> messages= new ArrayList<Messages>();
    	private static  List <Messages> messagesSupprimes= new ArrayList<Messages>();
    	Imap connexionImap= new Imap();
    	public ListesPersonnalisesPanelAppel()
    	{
    		messages=new InfosServeur().recupererMessages();
     
    	}
     
     
    	public Object getElementAt(int index) {
    		// TODO Auto-generated method stub
    		return messages.get(index);
    	}
     
    	@Override
    	public int getSize() {
    		// TODO Auto-generated method stub
    		return messages.size();
    	}
        public void addLigne(Object value) {
     
            this.addElement((String) value);
            System.out.println(value);
            int rowIndex = messages.size()-1;
            fireIntervalAdded(messages, rowIndex, rowIndex);
     
        }
    c ' est possible d ' ajouter une ligne de la sorte sans devoir ajouter un élément a mon arrayList (qui contient plusieurs attributs)

    pour infos , j ' appelle ma fonction ainsi lors du clic de mon bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ajouter.addActionListener(new ActionListener()
    			{
     
    				public void actionPerformed(ActionEvent e) {
    					 ((ListesPersonnalisesPanelAppel) listeMessage.getModel()).addLigne("Message supprimes");
     
    				}
    			});
    merci de votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    Personne a une idée


    La methode addElement ne fonctionne pas apparemment lorsque la jlist est remplie avec une arrayList

    Et je ne peux pas utiliser la methode add car mon arrayList contient des objets Messages , or je voudrai juste rajouter une ligne avec un String

    Merci de votre aide

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Par défaut
    Salut,

    Si tu veux utiliser un ArrayList, tu peux utiliser cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<Messages> liste = new ArrayList<Messages>();
    liste.setListData(liste.toArray());
    Après, pour le rafraichissement écran, il faudra peut-être ajouter un validate().

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    Salut ,

    Merci pour ton aide

    En fait , la méthode setListData fonctionne pour des object[] et n est donc pas compatible pour ma liste


    Comme solution externe , j ' ai tente de creer un autre constructeur dans ma classe Message qui prend uniquement un String en parametre
    et de faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maliste.add(new Message(" Message supprimés")
    mais puisque j ' ai une methode toString ds cette classe qui affiche 3 parametres , c ' est un peu mort>_<


    Je desire juste rajouter une ligne avec une String dedans

    Merci encore

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Par défaut
    Citation Envoyé par ulquiorra Voir le message
    En fait , la méthode setListData fonctionne pour des object[] et n est donc pas compatible pour ma liste
    C'est pour cela qu'il faut rajouter .toArray() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<Messages> liste = new ArrayList<Messages>();
    liste.setListData(liste.toArray());

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    Merci de ton aide

    oui , c ' est avec le toArray() que j 'ai testé

    ca me met ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The method setListData(Object[]) is undefined for the type List<Messages>
    il n y a pas moyen de juste rajouter un élément a une jlist déjà remplie par une arrayList sans devoir rajouter un élément a celle ci ?

    Merci encore

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The method setListData(Object[]) is undefined for the type List<Messages>
    Ce message indique que tu ne mets pas un objet de type Object[] dans la méthode setListData().

    Montre nous cette portion du code.

    Tu peux aussi essayer de décomposer, afin de "zoomer" sur la partie du code qui pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    List<Messages> liste = new ArrayList<Messages>();
    Object[] liste_array = liste.toArray();
    liste.setListData(liste_array);
    Sinon, en effet tu peux ajouter un élément à ta JList directement.
    Par contre, si tu as un attribut ArrayList, je trouve dommage qu'il ne soit pas "synchronisé" avec ce que contient ta JList.
    Pour ajouter dans ta JList, tu peux utiliser le addElement() du model :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	private DefaultListModel model = new DefaultListModel();
    	private JList liste = new JList();
     
    	liste.setModel(model);
     
    	// ...
    	model.addElement(mon_message_supplémentaire);

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    Salut, encore une fois merci de ton aide
    Ma Jlist est déjà remplie cependant via un modèle constitue ainsi:

    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
    public class ListesPersonnalisesInterfaceMessage extends DefaultListModel{
    	private  List<Messages> messages= new ArrayList<Messages>();
    	private static   List <Messages> messagesSupprimes= new ArrayList<Messages>();
    	Imap connexionImap= new Imap();
    	public ListesPersonnalisesInterfaceMessage()
    	{
    		 boolean etat = false;
    		   for ( int i =0; i < connexionImap.nbMessage(); i++ ) {
    		          try {
    		        	  if(connexionImap.isRead(i)==true) etat=true;
    		        	  else if(connexionImap.isNew(i)==false) etat=false;
    					messages.add(new Messages(etat,connexionImap.recupererNumero(i).toString(),connexionImap.recupererDate(i).toString()));
     
    				} catch (MessagingException e) {e.printStackTrace();}
     
    		        }
    		   try {
    			connexionImap.close();
    		} catch (MessagingException e) {e.printStackTrace();}
    		}
     
    	public Object getElementAt(int index) {
    		return messages.get(index);
    	}
     
     
    	public int getSize() {
    		return messages.size();
    	}
    Tout ce que je voudrais , c ' est rajouter une ligne en tant que dernier élément de ma Jlist

    j ' ai deja teste ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void addLigne(Object value) {
     
     
            this.addElement((String) value);
            System.out.println(value);
     
            int rowIndex = messages.size()-1;
            fireIntervalAdded(messages, rowIndex, rowIndex);
     
        }
    mais ca ne semble pas fonctionner si on rempli sa jlist avec un arrayList( ca doit marcher que pour les object je pense)

  9. #9
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Le truc c'est que tu appelles la méthode addElement que tu n'as pas redéfinie pour qu'elle ajoute ton entrée dans ton ArrayList. De fait ton addLigne ajoute bien une donnée dans le model, mais dans la collection héritée du DefaultListModel, et non dans ton ArrayList. Or tu as redéfini ton modèle pour qu'il affiche le contenu de l'ArrayList. Donc tes ajouts n'apparaissent pas CQFD.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    Ok merci de ton aide
    Je m ' en doutais bien que c ' etait parce que j ' utilisais une arrayList au lieu de la collection de defaultListModel(object[])

    Mais comment faire donc pour rajouter une ligne sans l ' ajouter a mon ArrayList?
    car celle ci est composée d ' un objet Message personnalise avec 3 attributs(un bool et 2 string) et je ne peut donc y ajouter un simple String

    J ' ai tente de contourner cela en rajoutant un constructeur dans ma classe Message qui prend seulement un String en paramètre et appeler celui dans addLigne , sauf qu étant donne que j ai redéfini toString dans Message pour afficher mes 3 attributs
    , ca m affiche quant même 3 valeur si j ' appelle ce constructeur.

    Merci de ton aide

  11. #11
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah tu fais en sorte que ton ArrayList de message ne soit pas utilisée dans ton modèle.

    C'est à dire qu'elle serve juste dans le constructeur de ton modèle pour initialiser la structure de données du modèle. Structure de données qui sera constituée de simple chaines.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    Merci de ton aide

    J ' essaye depuis hier mais je n ' arrive a rien et je n ' ai pas tres bien compris ta solution

    En gros tu me demandes de remplir mon modele avec une simple chaine comme 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    public class ListesPersonnalisesInterfaceMessage extends DefaultListModel{
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	private  List<Messages> messages= new ArrayList<Messages>();
    	private static   List <Messages> messagesSupprimes= new ArrayList<Messages>();
    	Object[] data = {"Par defaut"};
    	public ListesPersonnalisesInterfaceMessage(Imap connexionImap)
    	{
     
    		 boolean etat = false;
    		   for ( int i =0; i < connexionImap.nbMessage(); i++ ) {
    		          try {
    		        	  if(connexionImap.isRead(i)==true) etat=true;
    		        	  else if(connexionImap.isNew(i)==false) etat=false;
    					messages.add(new Messages(etat,connexionImap.recupererNumero(i).toString(),connexionImap.recupererDate(i).toString()));
     
    				} catch (MessagingException e) {e.printStackTrace();}
     
    		          System.out.println(messages);
     
    		        }
    		   try {
    			connexionImap.close();
    		} catch (MessagingException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
     
    	}
     
     
     
    	public Object getElementAt(int index) {
    		// TODO Auto-generated method stub
     
    		return data[index];
    	}
     
    	@Override
    	public int getSize() {
    		// TODO Auto-generated method stub
    		return data.length;
    	}
    sauf qu ' en faisant ca ma jlist n est plus remplie avec mon arrayList mais uniquement avec la chaine.
    Et j ' ai besoin de rajouter cette chaine lors du clic d ' un bouton

    En gros ce que tu demandes , c ' est que le modele soit remplie avec 2 donnees a la fois ou j 'ai mal compris ce que tu veux dire et je voudrais bien un petit exemple

    Merci encore de ton aide

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

Discussions similaires

  1. ajouter une ligne dans GtkListStore
    Par leged dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 04/08/2006, 19h44
  2. [vb6] Ajouter une ligne dans un tableau excel
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 13/06/2006, 17h41
  3. Ajouter une ligne dans un Stringgrid
    Par jouze dans le forum Composants VCL
    Réponses: 6
    Dernier message: 20/02/2006, 22h40
  4. Ajouter une ligne dans un DBGrid
    Par jbaers dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/11/2005, 10h18
  5. Ajouter une ligne dans une liste via un POPUP
    Par seblo_scoqi dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/01/2005, 17h20

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