使用具有完整内容的单个节点元素显示JTree

时间:2011-03-08 12:50:38

标签: java swing groovy jtree

我有一个节点,它具有以下格式的所有子节点和属性。

node =   Root[
         attributes = {rootattribute1, rootattribute2,...}, 
         value = [100,
                childNode1
                [
                attributes = {childNode2att1,.....}
                value = [1001]  
                ]

                childNode2
                [
                attributes = {childNode2attributes,.....}
                value = [1001]  
                ] ......... and some other childnodes like this
                ]

当我使用Jtree tree = new Jtree(node)时;它只为树创建一个单独的元素,在树的一行中显示所有这些细节。

相反,我希望使用嵌套的子节点和atrribute值在正确的层次结构中显示树。有没有内置的方法来做到这一点?

如果没有内置方法来执行此操作,我该如何为此编写代码?

PS:上面显示的节点内容是动态的,不是静态的。

1 个答案:

答案 0 :(得分:1)

您可以从以下内容开始:

import javax.swing.*
import javax.swing.tree.*

class Root {
    def attributes = []
    def children = []
    def value = 0

    def String toString() { 
        "[${value}] attributes: ${attributes} children: ${children}" 
    }
}

def createTreeNode(node) {
    def top = new DefaultMutableTreeNode(node.value)
    for (attr in node.attributes) {
        top.add(new DefaultMutableTreeNode(attr))
    }
    for (child in node.children) {
        top.add(createTreeNode(child))
    }   
    top
}

root = new Root(
    attributes: ['rootattribute1', 'rootattribute2'], 
    value: 100,
    children: [
        new Root(
            attributes: ['childNode2att1'],
            value: 1001),
        new Root(
            attributes: ['childNode2attributes'],
            value: 1002),    
    ])


frame = new JFrame('Tree Test')
frame.setSize(300, 300)
frame.defaultCloseOperation = JFrame.EXIT_ON_CLOSE
jtree = new JTree(createTreeNode(root))
frame.add(jtree)
frame.show()

JTree是一个复杂的组件 - 请阅读JTree Swing Tutorial,了解有关如何根据您的具体需求自定义树的更多详细信息。