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 :

Actualisation JList dynamique


Sujet :

Composants Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 121
    Points : 63
    Points
    63
    Par défaut Actualisation JList dynamique
    Bonjour,

    J'essai de créer une classe ADList dérivée de la classe JList. La classe ADList contient un argument de type ArrayList<AnnotatedDialog>. Chaque AnnotatedDialog possède un nom de fichier (en String) et le but de l'ADList est de donner la liste des noms de fichiers des AnnotatedDialog figurant dans l'ArrayList.

    J'ai créé la classe ADList qui semble fonctionner. Malheureusement, la liste ne s'actualise pas automatiquement. Si j'ajoute un élément dans l'ArrayList, il faut que je click sur mon ADList dans l'interface graphique pour que l'actualisation soit effectuée.

    Voici le code de la classe ADList :
    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
    ... imports ...
     
    public class ADList extends JList{
     
    	private ArrayList<AnnotatedDialog> ad;
     
    	public ADList(ArrayList<AnnotatedDialog> ad_arg){
     
    		ad = ad_arg;
     
    		setModel(new ADListModel());
    		this.setCellRenderer(new ADListCellRenderer());
    	}
     
    	/* Methode utilisee pour mettre a jour la liste */
    	public void setADL(ArrayList<AnnotatedDialog> ad_arg){	
    		ad = ad_arg;
    	}
     
    	public ArrayList<AnnotatedDialog> getAD(){
    		return ad;
    	}
     
    	public class ADListModel extends AbstractListModel {
     
    		public int getSize(){
    			return ad.size();
    		}
     
    		public Object getElementAt(int index){	
    			return ad.get(index).getFileName();	
    		}
     
    	}
     
    	private class ADListCellRenderer extends DefaultListCellRenderer{
     
    	    public Component getListCellRendererComponent(JList list, Object value, int index, boolean iss, boolean chf){
     
    	    	super.getListCellRendererComponent(list, value, index, iss, chf);
    	    	return this;
    	    }
     
    	}
    }
    Lorsque je modifie l'ArrayList en utilisant la méthode setAD la mise à jour est bien faite mais rien ne semble indiquer au composant graphique de s'acuatliser. Comment puis-je faire cela ? Je me suis trompé quelque part ?


    ------------
    EDIT : J'ai oublié de préciser comment j'affiche l'ADList. Je met l'ADList dans un JPanel puis je met le JPanel dans un JScrollPane puis je met le JScrollPane dans un autre JPanel :

    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
     
    JPanel jp_adl = new JPanel(new GridLayout());
    jp_adl.add(monADList);
     
    JScrollPane jsp_adl = new JScrollPane();
    jsp_adl = new JScrollPane(jp_adl);
     
    JPanel jp_frame = new JPanel(new GridBagLayout);
    jp_frame.add(jsp_adl, getConstraints(0, 4, 5, 1, 1.0, 0.48 , GridBagConstraints.WEST, GridBagConstraints.BOTH);
     
    ...
     
    public GridBagConstraints getConstraints(int x, int y, int width, int height, double wX, double wY, int anchor, int fill){
     
    	GridBagConstraints c = new GridBagConstraints();
     
    	c.gridx = x;
    	c.gridy = y;
    	c.gridwidth = width;
    	c.gridheight = height;
    	c.weightx = wX;
    	c.weighty = wY;
    	c.anchor = anchor;
    	c.fill = fill;
     
    	return c;
    }

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 121
    Points : 63
    Points
    63
    Par défaut
    J'ai trouvé une sorte de contournement qui semble marcher mais qui ne m'a pas l'air très beau.

    Pour signalé au ListModel que le contenu a changé, j'utilise la fonction "fireContentsChanged" dans la fonction setADL qui me permettait de mettre à jour les données. Cependant, comme je ne peux pas utiliser la fonction fireContentsChanged dans la JList, je passe par une méthode update que j'ai ajouté dans ADListModel.

    Voici le nouveau code de setADL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	public void setADL(ArrayList<AnnotatedDialog> ad_arg){	
    		ad = ad_arg;
    		((ADListModel)this.getModel()).update();
    	}
    et celui de update (qui se trouve dans ADListModel je rappel):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    		public void update(){
    			this.fireContentsChanged(ad, 0, ad.size());
    		}
    Avec ça, ma liste s'actualise correctement. Qu'en pensez-vous ? C'est du bidouillage ou c'est acceptable ?

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

Discussions similaires

  1. Remplir une Jlist dynamiquement
    Par a+polux dans le forum Débuter
    Réponses: 2
    Dernier message: 28/01/2010, 17h13
  2. Gérer le ré-affichage d'une JList dynamique
    Par zorglubpok dans le forum Composants
    Réponses: 11
    Dernier message: 04/11/2009, 15h22
  3. [JScrollPane] n'affiche pas toute ma JList dynamique
    Par Strab dans le forum Composants
    Réponses: 4
    Dernier message: 01/07/2008, 17h57
  4. Actualiser formulaire dynamique
    Par Badboy62cfp dans le forum Access
    Réponses: 5
    Dernier message: 11/05/2006, 18h36
  5. [SWING] Probleme actualisation Jlist
    Par MaxiMax dans le forum Composants
    Réponses: 1
    Dernier message: 24/01/2006, 11h21

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