Раскраска узлов дерева Java - PullRequest
0 голосов
/ 13 ноября 2009

Я хочу раскрасить (и дать значок) конкретный узел JTree, а не в таких группах, как OpenNode, LeafNode и т. Д. Как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 13 ноября 2009

В этом уроке от Sun показано, как устанавливать собственные значки узлов и как различать листовые и нелистовые листья в дереве.

0 голосов
/ 13 ноября 2009

Самый простой способ сделать это - создать модель JTree, используя DefaultMutableTreeNode s, и установить значение "пользовательский объект" для определенных узлов, а затем использовать это значение, чтобы определить поведение средства визуализации. когда он встречает этот узел.

Сначала мы строим простую модель и передаем ее конструктору JTree:

DefaultMutableTreeNode root = new DefaultMutableTreeNode("Hello");
DefaultMutableTreeNode child1 = new DefaultMutableTreeNode("Goodbye");
DefaultMutableTreeNode child2 = new DefaultMutableTreeNode("Bonjour");

root.add(child1);
root.add(child2);

JTree tree = new JTree(root);

Теперь определите настраиваемое средство визуализации ячеек дерева:

TreeCellRenderer renderer = new DefaultTreeCellRenderer() {
  public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
    // Defer to superclass to create initial version of JLabel and then modify (below).
    JLabel ret = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);

    // We know that value is a DefaultMutableTreeNode so this downcast is safe.
    MutableTreeNode node = (MutableTreeNode) value;

    // Inspect user object and change rendering based on this.
    if ("Hello".equals(node.getUserObject())) {
      ret.setIcon(...);
    }

    // Could also inspect whether node is a leaf node, etc.
    return ret;
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...