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 :

JXtreeTable fireDatachanged() fonction


Sujet :

AWT/Swing Java

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 33
    Points
    33
    Par défaut JXtreeTable fireDatachanged() fonction
    Bonjour,

    J'utilise un JXtreeTable mais je n'arrive pas a détecter quand une valeur est modifié dans une cellule dans mon jXtreeTable.

    J'ai redéfinie un model qui extends de AbstractTreeTableModel

    Dans ce model j'ai la méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Override
    	public void setValueAt(Object value, Object node, int column) {
    		MyTreeNode treenode = (MyTreeNode) node;
    		switch (column) {
    		case 0:
    			treenode.setName((String) value);
    		default:
    			treenode.getCell(column).setValue(value);
    		}
    	}
    La méthode Firedatachanged n'existe pas... dans un JXtreeTable


    je ne vois donc pas comment faire appel au Tablemodellistener qui est implémenté dans JXTreeTable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void tableChanged(TableModelEvent e) {
    		super.tableChanged(e);
    		System.out.println(e.getSource().toString());
     
    	}
    Aurez vous une idée

    Merci par avance

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    De souvenir, le modèle contient une membre appelé modelSupport de type TreeModelSupport qui est là pour ce genre d'opérations.


    A noter que le firePathChanged nécessite d'avoit un TreePath à disposition, donc il va te falloir prévoir une méthode calculant le TreePath de ton node, soit directement dans ton node, soit au niveau de ton model (il faudra passer le node en paramètre dans le cas).
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    Merci de ta réponse

    J'ai effectivement utilisé le membre model support
    Ma classe MyTreeNode dérive de DefaultMutableTreeNode ce qui me permet de récupérer le TreePath facilement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @Override
    	public void setValueAt(Object value, Object node, int column) {
    		MyTreeNode treenode = (MyTreeNode ) node;
    		switch (column) {
    		case 0:
    			treenode.setName((String) value);
    		default:
    			treenode.getCell(column).setValue(value);
    		}
    		TreePath path = new TreePath(treenode.getPath());
    		this.modelSupport.firePathChanged(path);
    	}
    Cela me notifie bien un événement que je récupère avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void tableChanged(TableModelEvent e)
    mais je n'ai que le numéro du ligne sur lequel le model insére une nouvelle valeur. La colonne vaut toujours -1. Si je clic sur un noeud du jtreetable la valeur de la ligne retourné est délirante...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Août 2004
    Messages : 30
    Points : 43
    Points
    43
    Par défaut
    personnellement j'ai des "editor" sur l'ensemble de mes cellules et aucun problème sur le numéro de colonne renvoyé. genre, mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Enumeration<TableColumn> enumCol = tblCmd.getColumnModel().getColumns();
                while (enumCol.hasMoreElements()) {
                    TableColumn tableCol = enumCol.nextElement();
                    tableCol.setCellRenderer(new CmdTableRenderer());
                    tableCol.setCellEditor(new EntitieTreeTableCellEditor(depot, listModel, null));
                }
    et dans mon modele:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void setValueAt(CommonEntities value, NodeEntities.ModeEntities mode , Object node, int column){
            super.setValueAt(value, node, column);
            Map<Integer,NodeEntities> listEntitie = map.get(node);
            if (listEntitie==null){
                listEntitie = new HashMap<Integer,NodeEntities>();
            }
     
            ImplNodeEntitiesWithCommonEntities editeValue=new ImplNodeEntitiesWithCommonEntities(value,mode);
            listEntitie.put(Integer.valueOf(column), editeValue);
            map.put(node, listEntitie);    
     
     
        }
    C 'est du code directe qui te dira sans doute rien comme ça mais l'idée est d'utiliser le numéro de colonne pour avoir une hash key que j'utilise pour identifier mes valeurs par la suite. en tous cas, la récup du num de colonne fonctionne.
    la JXTreeTable est galère!

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Fonction API
    Par margilb dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/07/2002, 11h11
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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