Заполнение JTree из базы данных

У меня есть таблица с полями category_id, category_name и parent_category_id. И parent_category_id имеет значения из category_id, которые представляют родительско-дочерние отношения. У меня нет фиксированного уровня иерархии, он может достигать 5 или 10 уровней, и этому нет предела. Мне нужен код для реализации этого JTree, чтобы он работал на меня. Я должен иметь возможность реализовать то же самое и для строки меню. Пожалуйста, помогите мне с этим.

После гугления я нашел это,

Map<String, Node> idToNode = new HashMap<String, Node>();   

//create nodes from ResultSet   
while ( resultSet.next() ){       
    Node node = //create node -contains info, parent id, and its own id from ResultSet
    //put node into idToNode, keyed with its id   
}   

//link together   
Iterator<String> it = idToNode.keySet().iterator();   
Node root = null;   
while ( it.hasNext() ){          
    Node node = idToNode.get(it.next());       
    Node parent = idToNode.get(node.getParentId());   
    if ( parent == null ) {  
        root = node;  
    }else{  
       parent.addChild(node);  
    }  
}

Как мне закодировать эти закомментированные инструкции?


person Deepak    schedule 21.02.2011    source источник


Ответы (1)


Используйте DefaultMutableTreeNode для создания узлов.

Создайте карту идентификаторов для узлов - когда вы получаете свои узлы из базы данных, сохраняйте их на карте с идентификатором в качестве ключа.

Когда у вас есть все узлы, просмотрите их еще раз и сопоставьте их родительские идентификаторы, извлекая их из карты.

Предполагая, что ваше дерево структурно правильное в базе данных, оно будет правильным и здесь. Выберите любой узел и следуйте по родительской цепочке к корню.

С помощью корневого объекта вы можете создать свой JTree. :)

person corsiKa    schedule 21.02.2011
comment
Кроме того, у меня не обязательно есть код. Но я чувствую, что здесь есть инструменты, которые вам нужны, чтобы это сделать :) Каждую вещь можно искать по мере необходимости. - person corsiKa; 22.02.2011
comment
у меня на самом деле нет времени кодировать эту вещь. Еще через 2 часа я смогу закончить эту часть, не могли бы вы найти для меня что-то похожее? даже я гуглю о помощи, но ничего не помогает .. спасибо !! - person Deepak; 22.02.2011
comment
Каждое из этих действий четко документировано. Я никогда не использовал их сам, но алгоритм звучит. Я не могу представить сценарий, в котором (при условии, что вы хотя бы наполовину компетентный разработчик, что, поскольку ваш пост был довольно ясным, я думаю, что это безопасное предположение) вам потребуется больше часа, чтобы сделать это. Это действительно похоже на 10 минут кода и 20 минут отладки ошибок, при условии, что время компиляции составляет 2-3 минуты. - person corsiKa; 22.02.2011
comment
у меня на самом деле нет времени кодировать эту вещь. -- Слишком дорого! - person Hovercraft Full Of Eels; 22.02.2011