Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数据库表转换为JTree_Java_Database_Oracle_Parent_Jtree - Fatal编程技术网

Java 将数据库表转换为JTree

Java 将数据库表转换为JTree,java,database,oracle,parent,jtree,Java,Database,Oracle,Parent,Jtree,任何人都可以提供一个工作示例代码来将以下具有父子关系的Oracle DB表转换为Java代码中的JTree吗 表T(列:Id、父项Id、说明)。 我已经搜索了很多类似的问题,但对于一个刚刚接触JTree的人来说,这些问题似乎都很模糊和不完整。我不需要任何代码来连接数据库,只需要查看结果并填充JTree即可 谢谢当我开始使用JTree时,我实现了这个类,它似乎与您的问题非常相似 检查方法:getElementTreeFromPlainList这或多或少是从持久层获取数据的方法,以及为树创建节点的方

任何人都可以提供一个工作示例代码来将以下具有父子关系的Oracle DB表转换为Java代码中的JTree吗

表T(列:Id、父项Id、说明)。

我已经搜索了很多类似的问题,但对于一个刚刚接触JTree的人来说,这些问题似乎都很模糊和不完整。我不需要任何代码来连接数据库,只需要查看结果并填充JTree即可


谢谢

当我开始使用JTree时,我实现了这个类,它似乎与您的问题非常相似

检查方法:
getElementTreeFromPlainList
这或多或少是从持久层获取数据的方法,以及为树创建节点的方法
createTreeNodesForElement

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

public class MyJFrame extends JFrame {

    private static final long serialVersionUID = 1L;

    private static List<String[]> data = new ArrayList<String[]>();

    static {
        data.add(new String[] { "Id1", "Start 1", null });
        data.add(new String[] { "Id2", "Node 1.1", "Id3" });
        data.add(new String[] { "Id3", "Node 1", "Id1" });
        data.add(new String[] { "Id4", "Node 1.2", "Id3" });
        data.add(new String[] { "Id5", "Node 2", "Id1" });
        data.add(new String[] { "Id6", "Start 2", null });
    }

    public static void main(final String[] args) {
        new MyJFrame();
    }

    MyJFrame() {
        JTree tree = new JTree();

        DefaultMutableTreeNode root = new DefaultMutableTreeNode("Found Nodes");

        createTreeNodesForElement(root, getElementTreeFromPlainList());

        tree.setModel(new DefaultTreeModel(root));

        add(tree);

        setVisible(true);
        setBounds(0, 0, 200, 200);
    }

    Collection<Element> getElementTreeFromPlainList() {
        // builds a map of elements object returned from store
        Map<String, Element> values = new HashMap<String, Element>();
        for (String[] s : data) {
            values.put(s[0], new Element(s[2], s[1]));
        }

        // creates a result list
        Collection<Element> result = new ArrayList<MyJFrame.Element>();

        // for each element in the result list that has a parent, put it into it
        // otherwise it is added to the result list
        for (Element e : values.values()) {
            if (e.parent != null) {
                values.get(e.parent).getChildren().add(e);
            } else {
                result.add(e);
            }
        }

        return result;
    }

    void createTreeNodesForElement(final DefaultMutableTreeNode dmtn, final Collection<Element> elements) {
        // for each element a tree node is created
        for (Element child : elements) {
            DefaultMutableTreeNode created = new DefaultMutableTreeNode(child.getName());
            dmtn.add(created);
            createTreeNodesForElement(created, child.getChildren());
        }
    }

    public static class Element {
        private final String parent;
        private final String name;
        private final Collection<Element> children = new ArrayList<MyJFrame.Element>();

        public Element(final String parent, final String name) {
            super();
            this.parent = parent;
            this.name = name;
        }

        public String getName() {
            return name;
        }

        public Collection<Element> getChildren() {
            return children;
        }

    }

}
import java.util.ArrayList;
导入java.util.Collection;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入javax.swing.JFrame;
导入javax.swing.JTree;
导入javax.swing.tree.DefaultMutableTreeNode;
导入javax.swing.tree.DefaultTreeModel;
公共类MyJFrame扩展了JFrame{
私有静态最终长serialVersionUID=1L;
私有静态列表数据=新的ArrayList();
静止的{
add(新字符串[]{“Id1”,“Start 1”,null});
添加(新字符串[]{“Id2”、“节点1.1”、“Id3”});
add(新字符串[]{“Id3”、“节点1”、“Id1”});
添加(新字符串[]{“Id4”,“节点1.2”,“Id3”});
add(新字符串[]{“Id5”、“节点2”、“Id1”});
add(新字符串[]{“Id6”,“Start 2”,null});
}
公共静态void main(最终字符串[]args){
新的MyJFrame();
}
MyJFrame(){
JTree树=新的JTree();
DefaultMutableTreeNode根=新的DefaultMutableTreeNode(“找到的节点”);
createTreeNodeForElement(根,getElementTreeFromPlainList());
setModel(新的DefaultTreeModel(root));
添加(树);
setVisible(真);
立根(0,0,200,200);
}
集合getElementTreeFromPlainList(){
//生成从存储区返回的元素对象的映射
映射值=新的HashMap();
对于(字符串[]s:数据){
值。put(s[0],新元素(s[2],s[1]);
}
//创建结果列表
收集结果=新建ArrayList();
//对于结果列表中具有父元素的每个元素,将其放入其中
//否则会将其添加到结果列表中
对于(元素e:values.values()){
如果(例如,parent!=null){
value.get(e.parent.getChildren().add(e);
}否则{
结果.添加(e);
}
}
返回结果;
}
void createTreeNodeForElement(最终默认可变TreeNode dmtn,最终集合元素){
//为每个元素创建一个树节点
for(元素子元素:元素){
DefaultMutableTreeNode created=新的DefaultMutableTreeNode(child.getName());
dmtn.add(已创建);
createTreeNodesForElement(已创建,child.getChildren());
}
}
公共静态类元素{
私有最终字符串父级;
私有最终字符串名;
private final Collection children=new ArrayList();
公共元素(最终字符串父级、最终字符串名称){
超级();
this.parent=parent;
this.name=名称;
}
公共字符串getName(){
返回名称;
}
公共集合getChildren(){
返回儿童;
}
}
}

根据这篇文章,很难确切地知道你在哪里感到困惑,你的问题涵盖了很多方面。为什么不先自己试试,如果你的尝试失败了,给我们看看你的代码。谢谢你的回复。我正试着满足你的要求。一旦我有进展,我会在这里告诉你。祝你好运!顺便说一句,不是我的否决票。没问题,否决票不会从我的银行账户中拿走任何钱:)。我想有些人太敏感了。@raj:我认为你的错误在于你在寻找一个你想做的事情的具体例子,一个可能不存在的例子,而不是在寻找如何使用JTree的一般例子,然后用你的大脑创建你自己的具体例子。忘记你徒劳的搜索,而是锻炼你的大脑皮层。这将是一个值得的练习。这正是我想要的。谢谢你,斯佩斯。在这里,我了解到,即使人们不知道问题的答案,他们仍然会回答(有些人会给出不好的评论):)但你救了我一天。