使用多种不同的字体在JTree中渲染节点

时间:2011-02-09 09:34:57

标签: java swing jtree

想象一下,我有一个显示多个字符串的JTree - 例如颜色列表。如何用不同的颜色/字体组合渲染这样的树?如何正确实现TreeCellRenderer?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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