Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    315

    JTree e DefaultTreeModel

    Salve,

    ho un applicazione che fa uso dell'accoppiata "JTree" e una mia classe che estende la classe "DefaultTreeModel". Quindi sulla sinistra del mio frame ho l'albero che riproduce la mia struttura.

    Lo scorro, punto un elemento e ci faccio delle operazioni. Quando rifaccio le operazioni ottengo delle modifiche sul TreeModel che però non vengono "visualizzate" nell'albero.

    Come devo fare affinchè l'albero "si accorga" delle modifiche che faccio al model e si modifichi di coneguenza??? (L'albero deve anche rimanere "aperto").

    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: JTree e DefaultTreeModel

    Originariamente inviato da koala81
    Come devo fare affinchè l'albero "si accorga" delle modifiche che faccio al model e si modifichi di coneguenza??? (L'albero deve anche rimanere "aperto").
    Un "model" notifica le modifiche (alla "view" e a qualunque altro XXXModelListener) tramite i metodi fireXXX(). Questo vale per un table model e per un tree model.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    315
    Non credo di aver capito molto bene...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da koala81
    Non credo di aver capito molto bene...
    Capisco ... può non essere subito facile e immediato comprendere i "model".

    Guarda questa discussione e il mio esempio completo che ho postato, anche se parla di JList e di un list model custom che estende AbstractListModel (quindi non centra nulla con JTree), può sicuramente darti una idea di cosa si deve fare per realizzare un model personalizzato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    315
    Se ho capito bene, quindi, i metodi fireXXX() sono metodi del model, non del JTree (nel mio caso).

    Non avresti qualche esempio di uso di JTree che faccia qualcosa dsi simile? Io nel frattempo cerco un pò in rete...

    Grazie mille dell'aiuto

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da koala81
    Se ho capito bene, quindi, i metodi fireXXX() sono metodi del model, non del JTree (nel mio caso).
    Sì, parlando in generale, i metodi delle interfacce TableModel e TreeModel si possono dividere in 2 categorie: quelli per "esporre" i dati del model all'esterno e quelli per (de)registrare il listener per la notifica delle modifiche.

    La classe astratta AbstractTableModel non fornisce una implementazione per i metodi che espongono i dati (quello è il compito di una apposita sottoclasse!) ma fornisce "di serie" tutta la gestione di (de)registrazione dei listener e alcuni comodi metodi fireXXX che semplicemente generano l'evento da inviare ai listener.

    Discorso un po' diverso per DefaultTreeModel, che offre già anche una struttura dati basata su TreeNode.

    Originariamente inviato da koala81
    Non avresti qualche esempio di uso di JTree che faccia qualcosa dsi simile? Io nel frattempo cerco un pò in rete...
    No purtroppo .... JTree è il componente Swing che conosco di meno!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    315
    Grazie...approfondisco un po' con la documentazione sun e il buon vecchio google...

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    315

    Re: Re: JTree e DefaultTreeModel

    Quando dici:

    Originariamente inviato da andbin
    Un "model" notifica le modifiche (alla "view" e a qualunque altro XXXModelListener) tramite i metodi fireXXX(). Questo vale per un table model e per un tree model.
    intendi che la "view" o un qualunque XXXModelListener devono avere un listener in ascolto?

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: JTree e DefaultTreeModel

    Originariamente inviato da koala81
    intendi che la "view" o un qualunque XXXModelListener devono avere un listener in ascolto?
    Vuol dire che quando passi l'apposito model ad un JList, JTable o JTree, loro usano il metodo addXXXListener() del model per "registrarsi" al fine di ricevere le notifiche sulle modifiche. È così che la parte che fa da "view" di questi componenti può "sentire" che qualcosa è stato modificato e quindi ridisegnarsi dove/come opportuno!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    315
    Per un motivo che sinceramente mi sfugge, il codice su cui sto lavorando "cambia" il model che sta associato all'albero ogni qual volta esegue una modifica. In pratica crea il nuovo modello con le modifiche fatte (cancellazione, aggiunta di un nodo...ecc) e lo riassocia al JTree.

    Questo spiegherebbe, credo, il motivo per cui i metodi fireXXX() non funzionino.

    Ora, dovendo continuare con questo codice, mi chiedo:

    1) E' possibile in qualche modo tenere informazione del percorso dell'"apertura" dell'albero?
    2) Conoscendo il nodo su cui ho effettuato modifiche, si può imporre manualmente l'apertuta dell'albero fino a quel nodo?

    Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.