2011-02-09 66 views

回答

2

您可以扩展DefaultTreeCellRenderer。在调用super()的getTreeCellRendererComponent方法中,检查你的条件,例如通过分析价值。之后,相应地调用setFont(),setBackground()和setForeground()方法。

1

另一种可能的方法是创建一个实现TreeCellRenderer的内部类。你所要做的就是按照你想要的方式定制JLabel。

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; 
    } 

取自this site