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 :

Bloqué sur un Jlist LModel


Sujet :

AWT/Swing Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2009
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2009
    Messages : 249
    Points : 145
    Points
    145
    Par défaut Bloqué sur un Jlist LModel
    Bonjour,

    J'ai créé une extension d'une JList et je suis bloqué lorsque j'ajoute des lignes après avoir fait une removeAllElements.

    J'ajoute plusieurs centaines de lignes, et tout à coup je suis bloqué, et jamais au même endroit. Lorsque je clique avec le bouton droit j'execute une méthode pour changer les couleurs de certaines parties de la ligne texte. Cela marche très bien. Mais dans l'essai que j'ai fait, je lis simplement toutes les lignes et les ré-écris. J'ai vérifié que toutes les lignes sont bien lues, en créant un fichier texte. Toutes les lignes sont présentes lorsque l'ajout dans le modèle est en commentaire ( Environ 32 000.) mais dès que je dé-commente cette instruction, ça bloque.


    Ma question est : y-a-il une limite ? après avoir remis le modèle à zéro.
    Merci

    Gérard

    Voici un résumé de ce que je fais.
    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
    public class GegeList extends javax.swing.JList 
    {
           public GegeList() // constructeur
    	{
    		super();
    		 initialize();   // 
    	}
    	 
           void initialize()
           { 
                    this.addMouseListener(new MouseAdapter() 
    		{
    			    public void mouseClicked(MouseEvent e)
    			{
    				  if (SwingUtilities.isRightMouseButton(e) || e.isControlDown()) 
    			         {
    					refresh();
    			           
    			     }
    			}
    		));
            }
           
          void refresh() 
          {
                     DefaultListModel listModel = (DefaultListModel) this.getModel();
    		  if (listModel==null) return;
    		  if (listModel.size()==0) return;
    		 Vector<String> v = new Vector<String>();
    		String entete = "color='";
    		
    		for (int i=0; i<listModel.size(); i++)
    		{
    		    String ligne = (String) listModel.elementAt(i);
    		    if (ligne.startsWith("<html>")) 
    		    {
    		        //  if (ligne.indexOf("C3=") >5)                   ligne = refresh1Couleurs(ligne, v, entete);
    		       // else   						ligne = refresh2Couleurs(ligne, v, entete);
    		    }
    		         v.add(i, ligne);
    		 } 
    		
    		  listModel.removeAllElements();
    		 try
    		 {
    		   //	String newLine = System.getProperty("line.separator");
    		  //	FileWriter fw = new FileWriter("F:\\Test\\TestJava.txt");
    
    			for (int i=0; i<v.size(); i++)
    			{
    				String ligne = v.elementAt(i);
    			        listModel.addElement(ligne);   // bloqué ici après quelques centaines d'ajouts
    				 // fw.write(ligne+newLine);
    			}
    			// fw.close();
    			// this.setModel(listModel);
    		}
    		catch (Exception ex) {System.out.println(ex.toString());}
    	}
    	
          }

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2009
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2009
    Messages : 249
    Points : 145
    Points
    145
    Par défaut
    J'ai trouvé mon problème après deux jours de recherches. En fait je n'était pas bloqué, mais les modifications prenaient très longtemps (presque 10 minutes).

    Si cela peut servir à d'autres voici la solution.

    Il semble que :

    myModel.removeAllElements()

    ne nettoie pas réellement le contenu du modèle. Cela marche très bien lorsque il y a peu de lignes dans une JList, mais dès que le nombre est important cela prend un temps fou à l'utiliser à nouveau.

    Pour résoudre ce problème après le remove, j'ai défini un nouveau modèle que j'utilise, et cette fois c'est immédiat.
    Mon code a ainsi été modifié comme suit :

    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
     void refresh() 
          {
                     DefaultListModel listModel = (DefaultListModel) this.getModel();
    		 if (listModel==null) return;
    		 if (listModel.size()==0) return;
    		 Vector<String> v = new Vector<String>();
    		 String entete = "color='";
    		
    		for (int i=0; i<listModel.size(); i++)
    		{
    		    String ligne = (String) listModel.elementAt(i);
    		    if (ligne.startsWith("<html>")) 
    		    {
    		        //  if (ligne.indexOf("C3=") >5)                   ligne = refresh1Couleurs(ligne, v, entete);
    		        // else   						ligne = refresh2Couleurs(ligne, v, entete);
    		    }
    		    v.add(i, ligne);
    		 } 
    		
    		  listModel.removeAllElements(); 
    		  DefaultListModel newModel =   new DefaultListModel();   // les modifications commencent ici
    		  try
    		  {
    			for (int i=0; i<v.size(); i++)
    			{
    				String ligne =
    			        newModel.addElement( v.elementAt(i););    
    			}
    			this.setModel(newModel);
    		}
    		catch (Exception ex) {System.out.println(ex.toString());}
    	}

Discussions similaires

  1. Bloqué sur une association
    Par benjhe dans le forum Schéma
    Réponses: 4
    Dernier message: 31/03/2006, 15h49
  2. Je bloque sur Microsoft Power Point 2003
    Par agoubi dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 30/03/2006, 14h32
  3. Réponses: 9
    Dernier message: 29/03/2006, 18h23
  4. [ACCESS] Je bloque sur une requête...
    Par portu dans le forum Langage SQL
    Réponses: 8
    Dernier message: 16/02/2006, 10h33
  5. Réponses: 2
    Dernier message: 15/11/2005, 10h09

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