LINUX.ORG.RU

Как получить имена всех child'ов узла в дереве JTree?


0

0

Java/Swing.
Есть дерево типа JTree.
Есть необходимость, чтобы при выборе узла выводились по очереди все имена дочерних узлов (выбранного узла).

DefaultMutableTreeNode root = new DefaultMutableTreeNode("languages");
DefaultMutableTreeNode child;
child = new DefaultMutableTreeNode("java"); root.add(child);
child = new DefaultMutableTreeNode("ruby"); root.add(child);
child = new DefaultMutableTreeNode("python"); root.add(child);

model = new DefaultTreeModel(root);
tree = new JTree(model);

Т.е. чтобы при выборе "languages" были выведены в консоль "java", "ruby", "python".

Нужно добавить "слушатель" типа
tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode selectednode = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
...

а вот что именно в него вписать - не знаю.
Пытался написать что-то типа этого:
TreeNode s1 = selectedNode.getChildAt(0);
DefaultMutableTreeNode s11 = (DefaultMutableTreeNode)s1;
System.out.println("%%%Child node: " + (String)s11.getUserObject());
но выдает ошибку.
Помогите.

anonymous

tree.addTreeSelectionListener(new TreeSelectionListener() 
{ 
    public void valueChanged(TreeSelectionEvent e) 
    { 
        DefaultMutableTreeNode selectednode = (DefaultMutableTreeNode)
                               e.getPath().getLastPathComponent(); 

        Enumeration enum = selectedNode.children();
        DefaultMutableTreeNode child;

        for (; enum.hasMoreElements() ;) 
        {
            child = (DefaultMutableTreeNode)enum.nextElement();

            System.out.println("%%%Child node: " + 
                         child.getUserObject().toString());
        }
    }
}

по идее так должно работать; в чем у тебя ошибка - не знаю - могу только предположить, что null pointer exception на s11.getUserObject(), когда выбираешь не root, а один из дочерних элементов, т.к. для дочерних selectedNode.getChildAt(0) вернет null.

ps. 
> child = new DefaultMutableTreeNode("java"); root.add(child);
<=>
root.add(new DefaultMutableTreeNode("java")); // так по-моему аккуратнее ;)

а вообще так себе проблема - мог бы и сам решить :)
http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html

bender ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.