Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502

    [Java] Estendere DefaultTreeCellRenderer

    Ciao a tutti.
    Ho un JTree a cui volevo dare un look personalizzato.
    Ho esteso la classe DefaultTreeCellRenderer per far ciò. La gestione dell'icona mi riesce, la gestione del colore anche.
    Quello che non mi riesce e ti impostare il bordo del nodo selezionato a quello di default.
    Non ho trovato nessun metodo come per i colori, o mi sfugge?
    Devo impostarlo io il bordo senza poterlo ricavare dal componente di default?
    codice:
    class MyTreeRenderer extends DefaultTreeCellRenderer {
    
        Icon casaIcon;
        Icon ufficioIcon;
    
        public MyTreeRenderer(Icon casaIcon, Icon ufficioIcon) {
            this.casaIcon = casaIcon;
            this.ufficioIcon = ufficioIcon;
            this.setFont(new Font("Arial", Font.PLAIN, 12));
        }
    
        @Override
        public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
            super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
            if (leaf && isCasa(value)) {
                setIcon(this.casaIcon);
            } else if (leaf && isUfficio(value)) {
                setIcon(this.ufficioIcon);
            }
            JLabel l = new JLabel();
            l.setIcon(getIcon());
            l.setText(getText());
            if (sel) {
                l.setBackground(this.getBackgroundSelectionColor());
                l.setForeground(this.getTextSelectionColor());
            } else {
                l.setForeground(this.getTextNonSelectionColor());
            }
            l.setOpaque(sel);
            return l;
        }
    }
    Cosa mi sfugge?
    al volante son nervoso

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

    Re: [Java] Estendere DefaultTreeCellRenderer

    Originariamente inviato da Rubox
    Quello che non mi riesce e ti impostare il bordo del nodo selezionato a quello di default.
    Non ho trovato nessun metodo come per i colori, o mi sfugge?
    Innanzitutto una cosa: hai esteso DefaultTreeCellRenderer. Ok. Ma poi non usi sé stesso (che è un JLabel) come componente da ritornare ma istanzi tu un altro JLabel. E allora che ti serve tutto il giro di estensione e invocazione di super.getTreeCellRendererComponent() ????

    O fai tutto da te e imposti tutto quanto (e ti basterebbe implementare direttamente TreeCellRenderer), oppure estendi DefaultTreeCellRenderer e ti limiti a cambiare solo quel poco che ti serve. In questo caso dovresti invocare la versione super di getTreeCellRendererComponent, impostare poi sul 'this' (che è un JLabel) quello che ti serve di specifico e far ritornare 'this', non una "tua" altra JLabel.
    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
    Feb 2009
    Messaggi
    502
    Se istanzio a livello di classe del mio renderer un DefaultTreeCellRenderer per "prendere" le icone di default che non voglio cambiare... è una cosa lecita vero?
    Altrimenti non saprei come "ricavarle".
    al volante son nervoso

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Rubox
    Se istanzio a livello di classe del mio renderer un DefaultTreeCellRenderer per "prendere" le icone di default che non voglio cambiare... è una cosa lecita vero?
    Altrimenti non saprei come "ricavarle".
    No ... ma allora forse non ci siamo capiti. Tu hai esteso DefaultTreeCellRenderer. DefaultTreeCellRenderer è-un JLabel e il suo getTreeCellRendererComponent ritorna 'this' praticamente sé stesso.

    Tu non hai usato sé stesso come Component da ritornare dal tuo getTreeCellRendererComponent. Hai istanziato un nuovo JLabel e hai ritornato questo. Quindi ripeto la domanda: che ti serve estendere DefaultTreeCellRenderer e invocare super.getTreeCellRendererComponent???
    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
    Feb 2009
    Messaggi
    502
    Originariamente inviato da andbin
    No ... ma allora forse non ci siamo capiti. Tu hai esteso DefaultTreeCellRenderer. DefaultTreeCellRenderer è-un JLabel e il suo getTreeCellRendererComponent ritorna 'this' praticamente sé stesso.

    Tu non hai usato sé stesso come Component da ritornare dal tuo getTreeCellRendererComponent. Hai istanziato un nuovo JLabel e hai ritornato questo. Quindi ripeto la domanda: che ti serve estendere DefaultTreeCellRenderer e invocare super.getTreeCellRendererComponent???
    Scusa non ho scritto che ora o fatto un renderer estendendo JLabel e implementando TreeCellRenderer

    In effetti prima non aveva senso, ma stavo facendo delle prove per impostare setOpaque a falso quando un nodo non è selzionato, in modo da vedere lo sfondo del JTree e non il rettangolo bianco della label. E infatti avevo messo al volo la JLabel. Insomma un pasticcio come sempre.

    Per recuperare le icone classiche di un JTree, è correttofare come ho scritto sopra?
    al volante son nervoso

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Rubox
    Per recuperare le icone classiche di un JTree, è correttofare come ho scritto sopra?
    Che intendi per icone "classiche"?? DefaultTreeCellRenderer gestisce delle icone "predefinite" ... sono quelle che si possono ottenere dai metodi getXXX() di DefaultTreeCellRenderer che ritornano un Icon.
    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
    Feb 2009
    Messaggi
    502
    Originariamente inviato da andbin
    Che intendi per icone "classiche"?? DefaultTreeCellRenderer gestisce delle icone "predefinite" ... sono quelle che si possono ottenere dai metodi getXXX() di DefaultTreeCellRenderer che ritornano un Icon.
    Si intendevo le icone di default che un JTree visualizza.
    al volante son nervoso

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 © 2026 vBulletin Solutions, Inc. All rights reserved.