2011-02-09 2 views
0

Imaginez que j'ai un JTree qui montre plusieurs chaînes - par exemple une liste de couleurs. Comment serait-il possible de rendre un tel arbre avec une combinaison couleur/police différente? Comment implémenter TreeCellRenderer correctement?Rendu de nœuds dans JTree avec plusieurs polices différentes

Nous vous remercions de votre aide.

Répondre

2

Vous pouvez étendre DefaultTreeCellRenderer. Dans la méthode getTreeCellRendererComponent, vous appelez super() et vérifiez vos conditions, par ex. en analysant la valeur. Après cet appel, setFont(), setBackground() et setForeground() les méthodes en conséquence.

1

Une autre méthode possible consiste à créer une classe interne qui implémente TreeCellRenderer. Tout ce que vous avez à faire est de personnaliser le JLabel comme vous le souhaitez.

public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, 
     boolean expanded, boolean leaf, int row, boolean hasFocus) { 

    Component returnValue = null; 
    if ((value != null) && (value instanceof DefaultMutableTreeNode)) { 
     Object userObject = ((DefaultMutableTreeNode) value).getUserObject(); 
     if (userObject instanceof Employee) { 
     Employee e = (Employee) userObject; 
     firstNameLabel.setText(e.firstName); 
     lastNameLabel.setText(e.lastName); 
     salaryLabel.setText("" + e.salary); 
     if (selected) { 
      renderer.setBackground(backgroundSelectionColor); 
     } else { 
      renderer.setBackground(backgroundNonSelectionColor); 
     } 
     renderer.setEnabled(tree.isEnabled()); 
     returnValue = renderer; 
     } 
    } 
    if (returnValue == null) { 
     returnValue = defaultRenderer.getTreeCellRendererComponent(tree, value, selected, expanded, 
      leaf, row, hasFocus); 
    } 
    return returnValue; 
    } 

pris à partir de this site.

Questions connexes