Индексирование узлов JTree - PullRequest
0 голосов
/ 10 июня 2011

Я хотел бы создать индекс (1, 1.2, 1.3, 2.1 и т. Д.) Для каждого узла JTree во время добавления нового узла,

т.е.

root
|
 ---1 node
|
 ---2 node
    |
     ---2.1 node 

Кто-нибудь знает, как я могу это сделать? Заранее благодарю за любые ответы.

Ответы [ 3 ]

2 голосов
/ 10 июня 2011

Когда вы добавляете узел, найдите текущее количество узлов на этом уровне, и ваш индекс вашего нового узла - это число плюс 1.

1 голос
/ 10 июня 2011

Поскольку вы не сказали нам, если вы реализовали свою собственную TableModel, я предполагаю, что вы работаете со стандартным JTree и моделью по умолчанию.Метод, который извлекает индекс узла в виде строки, будет выглядеть следующим образом:

public String getNodeIndex(JTree tree, TreeNode node) {
    TreeNode root = (TreeNode) tree.getModel().getRoot();
    if (node == root) {
        return "";
    }
    TreeNode parent = node.getParent();
    if (parent == null) {
        return null;
    }
    String parentIndex= getNodeIndex(tree, parent);
    if (parentIndex == null) {
        return null;
    }
    return parentIndex+"."+parent.getIndex(node);
}

Этот код должен работать до тех пор, пока вы не встраиваете циклы в свое дерево, как если бы он работал рекурсивно докорень.

1 голос
/ 10 июня 2011

С помощью сложных компонентов пользовательского интерфейса лучше различать модель данных и рендеринг. Как следствие, я предлагаю вам реализовать TreeModel, который возвращает, например, объекты Nodes, которые могут содержать целое число для его уровня, а также реализовать TreeCellRenderer, который выполняет рендеринг узла.

Индекс может быть либо вычислен при каждом рендеринге с использованием родительского узла, который может быть запрошен, чтобы модель информации могла быть кэширована в узел. Вы можете посмотреть здесь, как реализовать пользовательскую TreeModel: http://download.oracle.com/javase/tutorial/uiswing/components/tree.html#data

Если вам нужно что-то делать при щелчке по родительским узлам, вы можете использовать прослушиватели Tree-Will-Expand (также упоминаемые в руководстве)

...