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 :

[JXTable] MoveColumn et mise à jour du modèle


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 108
    Par défaut [JXTable] MoveColumn et mise à jour du modèle
    Bonjour,

    Je travaille actuellement sur un JXTable et j'aurais besoin de mettre à jour le model que j'ai redefini (et qui extends AbstractTableModel) lorsque l'on change une colonne.

    Dans mon model, j'ai une méthode moveColumn() qui s'occupe d'intervertir 2 column (entete et contenu).
    Cette méthode est appellé depuis un écouteur "TableColumnModelListener" en surchargeant la méthode public void columnMoved(TableColumnModelEvent e);

    Ma méthode moveColumn est la suivante :
    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
    public void moveColumn(final int fromIndex, final int toIndex) {
    		// cas d'index negatif, on ne fait pas de traitement
    		if(fromIndex < 0 || toIndex < 0)
    			return ;
     
    		// si fromIndex = toIndex, on ne fait pas de traitement
    		if(fromIndex == toIndex)
    			return ;
     
    		// l'entete et les data ne doivent pas etre null
    		if(enteteColonnes == null || data == null)
    			return ;
     
    		// les conditions sont remplis, on fait le switch dans les entetes et dans les données
    		String enteteTmp = enteteColonnes.get(toIndex);
    		enteteColonnes.set(toIndex, enteteColonnes.get(fromIndex));
    		enteteColonnes.set(fromIndex, enteteTmp);
     
    		// pour chaque ligne on doit changer la colonne car data.get(i) renvoit la ligne et data.get(i).get(j) donna la valeur de la colonne
    		String cellTmp;
    		for(int i = 0 ; i < data.size() ; i++){
    			cellTmp = data.get(i).get(toIndex);
     
    			//setValueAt(data.get(i).get(fromIndex), i, toIndex);
    			//setValueAt(cellTmp, i, fromIndex);
    			data.get(i).set(toIndex, data.get(i).get(fromIndex));
    			data.get(i).set(fromIndex, cellTmp);
    		}
    		//fireTableStructureChanged();
    	}
    Lorsque j'active la ligne //fireTableStructureChanged();, la modification sur mon JXTable est correcte mais je n'ai plus la colonne en selection pour continuer le déplacement de celle-ci via la souris (je suis obliger de la reselectionner et de refaire la manipulation : deplacement colonne par colonne).

    Sans cette ligne et c'est mon problème, le model semble correctement mis à jour mais la vue de mon JTable est erroné (dans la colonne qu'on deplace il prend une valeur voisine).

    Par contre pour le changement de colonnes au niveau du titre aucun problème c'est bien correct dans le model et a l'affichage seul l'action sur les data pose soucis...


    Avez-vous une idée pour résoudre mon problème ?
    Merci d'avance,

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 108
    Par défaut
    J'ai aussi le problème pour mettre à jour le modèle lors d'un tri d'une colonne...
    La partie view est bien mise à jour mais pas le model.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 108
    Par défaut
    Personne n'aurait une idée svp ? :s

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 108
    Par défaut
    Je met en ligne ma solution si des fois ca peut servir a quelqu'un...

    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
    private void updateModelWithViewAfterSort() {
     
    		int indexModel;
    		MonModel model = ((MonModel) sdbp.getTable().getModel());
     
    		// parcours chaque colonne pour remettre les data a jour du model en fonction de la view
    		for (int i = 0; i < sdbp.getTable().getColumnCount(); i++) {
    			indexModel = sdbp.getTable().convertColumnIndexToModel(i);
     
    			// switch les colonnes que si l'index de la view et du model ne sont pas les memes
    			if (indexModel != i)
    				model.moveColumn(indexModel, i);
    		}
     
    		List<List<String>> data = ((MonModel) sdbp.getTable().getModel()).getData();
    		List<List<String>> newData = new ArrayList<List<String>>();
     
    		// parcours chaque ligne pour remettre les data a jour du model en fonction de la view
    		for (int i = 0; i < sdbp.getTable().getRowCount(); i++) {
    			indexModel = sdbp.getTable().convertRowIndexToModel(i);
    			newData.add(data.get(indexModel));
    		}
    		model = new MonModel(model.getEnteteColonnes(), data);
    		sdbp.getTable().setModel(model);
     
    	}

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/12/2011, 11h47
  2. [WD-2003] Mise à jour de modèle de styles
    Par nchristedem dans le forum Word
    Réponses: 4
    Dernier message: 16/11/2011, 21h27
  3. Problème de mise à jour du modèle
    Par Teaniel dans le forum Bases de données
    Réponses: 0
    Dernier message: 06/11/2011, 01h28
  4. diff avant et après sorting pour mise à jour du modèle
    Par Leon Ira dans le forum Composants
    Réponses: 2
    Dernier message: 30/07/2009, 21h55
  5. [JTable] Probleme pour afficher la mise à jour du modèle
    Par Yannick_from_31 dans le forum Composants
    Réponses: 2
    Dernier message: 02/06/2006, 19h10

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