Рендеринг узлов в JTree с несколькими разными шрифтами - PullRequest
0 голосов
/ 09 февраля 2011

Представьте, что у меня есть JTree, которое показывает несколько строк - например, список цветов. Как можно было бы сделать такое дерево с разным сочетанием цвета и шрифта? Как правильно реализовать TreeCellRenderer?

Спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 09 февраля 2011

Вы можете расширить DefaultTreeCellRenderer.В методе getTreeCellRendererComponent вы вызываете super () и проверяете условия, например, анализируя значение.После этого вызовите методы setFont (), setBackground () и setForeground () соответственно.

1 голос
/ 09 февраля 2011

Другой возможный способ - создать внутренний класс, который реализует 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;
  }

взято с этого сайта .

...