Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    36

    Identificatore univoco di riga JTree

    Ciao a tutti, ho una domandina a cui sicuramente qualcuno di voi saprà rispondermi senza problemi ma purtroppo ci sbatto da un po e non riesco a risolvere, dunque:

    ho creato un menù per un softwarino che sto realizzando con jTree, allo stato attuale dico se l'utente ha fatto doppio click e jTreeMenu.getLeadSelectionRow() == 3 fai questo se uguale a 4 fai quell'altro. Il problema è che getLeadSelectionRow "conta" le righe del menu ero se io ho un menu con sottomenu ma non ho espanso quella voce lui non conta la riga del sottomenu e quindi mi sballano i conti... Qualcuno sa aiutarmi?
    Grazie anticipatamente a tutti
    Ciao

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da loop4633 Visualizza il messaggio
    ho creato un menù per un softwarino che sto realizzando con jTree, allo stato attuale dico se l'utente ha fatto doppio click e jTreeMenu.getLeadSelectionRow() == 3 fai questo se uguale a 4 fai quell'altro. Il problema è che getLeadSelectionRow "conta" le righe del menu ero se io ho un menu con sottomenu ma non ho espanso quella voce lui non conta la riga del sottomenu e quindi mi sballano i conti... Qualcuno sa aiutarmi?
    In ciascun nodo dell'albero cosa metti? Solo un banale String con la voce da visualizzare? Non è una buona idea. L'ideale, per risolvere bene, sarebbe mettere nei nodi un oggetto di una tua classe che contiene più informazioni utili.

    Altrimenti sei costretto a fare degli accrocchi come quello che hai detto .... che sono fumosi e error-prone.
    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
    May 2011
    Messaggi
    36
    Intanto grazie mille per la tua risposta.
    Si, utilizzo una semplice stringa per visualizzare la voce di menu. Nei nodi un oggetto della mia classe cosa intendi? Hai un esempio?
    Grazie

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da loop4633 Visualizza il messaggio
    Si, utilizzo una semplice stringa per visualizzare la voce di menu. Nei nodi un oggetto della mia classe cosa intendi? Hai un esempio?
    DefaultMutableTreeNode(Object userObject)

    Invece di usare stringhe, come userObject passi oggetti di una tua classe che modella in modo più appropriato la voce e contiene le informazioni utili che ti servono.


    P.S.: How to Use Trees
    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
    May 2011
    Messaggi
    36
    Allora ho visto il codice che mi ha generato Netbeans per fare questa cosa e le voci di menu sono create tutte in questo modo:

    javax.swing.tree.DefaultMutableTreeNode treeNode2 = new javax.swing.tree.DefaultMutableTreeNode("Pannello di Controllo");
    treeNode1.add(treeNode2);
    Onestamente non capisco a che serve passargli l'oggetto... preso dalla documentazione java:
    //original Tutorial
    book = new DefaultMutableTreeNode(new BookInfo
    ("The Java Tutorial: A Short Course on the Basics",
    "tutorial.html"));
    category.add(book);
    a cosa serve new BookInfo?

    E comunque ammesso che io seguissi questa strada (anche se ancora non ho capito granchè) come faccio poi ad identificare la riga quando l'utente clicca?
    Grazie ancora per il tuo aiuto
    ciao

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da loop4633 Visualizza il messaggio
    Allora ho visto il codice che mi ha generato Netbeans
    Il codice per il popolamento del JTree dovresti (poi) scriverlo tu .... non Netbeans.

    Quote Originariamente inviata da loop4633 Visualizza il messaggio
    Onestamente non capisco a che serve passargli l'oggetto...
    Serve ad avere più informazioni di "contesto" sulla voce che hai selezionato.

    Quote Originariamente inviata da loop4633 Visualizza il messaggio
    preso dalla documentazione java:
    a cosa serve new BookInfo?
    A modellare l'insieme di 2 informazioni: la stringa da visualizzare e un url che viene usato per visualizzare una pagina.

    Se tu facessi banalmente:

    book = new DefaultMutableTreeNode("The Java Tutorial: A Short Course on the Basics");

    Come faresti ad associare "tutorial.html" a tale voce? Riusciresti, certo, ma con del codice un po' fumoso ......

    Quote Originariamente inviata da loop4633 Visualizza il messaggio
    E comunque ammesso che io seguissi questa strada (anche se ancora non ho capito granchè) come faccio poi ad identificare la riga quando l'utente clicca?
    Sempre direttamente dall'esempio del tutorial:

    codice:
    /** Required by TreeSelectionListener interface. */
    public void valueChanged(TreeSelectionEvent e) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode)
                           tree.getLastSelectedPathComponent();
    
        if (node == null) return;
    
        Object nodeInfo = node.getUserObject();
        if (node.isLeaf()) {
            BookInfo book = (BookInfo)nodeInfo;
            displayURL(book.bookURL);     // <------- QUI vedi che usa facilmente l'informazione extra!
    
      ...........
    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
    May 2011
    Messaggi
    36
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Sempre direttamente dall'esempio del tutorial:

    codice:
    /** Required by TreeSelectionListener interface. */
    public void valueChanged(TreeSelectionEvent e) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode)
                           tree.getLastSelectedPathComponent();
    
        if (node == null) return;
    
        Object nodeInfo = node.getUserObject();
        if (node.isLeaf()) {
            BookInfo book = (BookInfo)nodeInfo;
            displayURL(book.bookURL);     // <------- QUI vedi che usa facilmente l'informazione extra!
    
      ...........
    Probabilmente non sarai d'accordo però ti dico lo stesso come ho risolto, magari può servire a qualcun altro
    Facendo tree.getLastSelectedPathComponent(); si ottiene esattamente la stringa del menu quindi banalmente basta poi fare uno switch con la stringa piuttosto che con l'indice come facevo io e il problema è risolto
    Grazie mille per il tuo aiuto
    Ciao

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da loop4633 Visualizza il messaggio
    Probabilmente non sarai d'accordo però ti dico lo stesso come ho risolto, magari può servire a qualcun altro
    Facendo tree.getLastSelectedPathComponent(); si ottiene esattamente la stringa del menu quindi banalmente basta poi fare uno switch con la stringa piuttosto che con l'indice come facevo io e il problema è risolto
    In generale non è molto buono. Non dico però che è completamente sbagliato. Se il tuo scenario è molto semplice, con poche voci e soprattutto note a priori, potrebbe anche andare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    36
    Quote Originariamente inviata da andbin Visualizza il messaggio
    In generale non è molto buono. Non dico però che è completamente sbagliato. Se il tuo scenario è molto semplice, con poche voci e soprattutto note a priori, potrebbe anche andare.
    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.