4

SQLクエリからインポートする2次元オブジェクト配列からJTreeを作成したいと思います。SQLテーブルは次のようになります。

オブジェクトのサンプルは次のとおりです。

    Object[][] table = {
        {1, 0, "Root"}, //i=0
        {2, 1, "Node2"}, //i=1
        {3, 1, "Node3"}, //i=2
        {4, 1, "Node4"}, //i=3
        {5, 4, "Node5"}, //i=4
        {6, 4, "Node6"}, //i=5
        {7, 4, "Node7"}, //i=6
        {8, 1, "Node8"}, //i=7
        {9, 1, "Node9"}, //i=8
        {10, 9, "Node10"},}; //i=9

配列を並べ替えるために使用するロジックは次のとおりです。

    for (int i = 0; i < table.length; i++) {
        for (int j = i; j < table.length; j++) {
            if (table[i][0] == table[j][1]) {
                System.out.println(table[i][2].toString() + " is parent of " + table[j][2].toString());
            }
        }
    } 

これは、上記がコンソールに表示するものです。

 Root is parent of Node2
 Root is parent of Node3
 Root is parent of Node4
 Root is parent of Node8
 Root is parent of Node9
 Node4 is parent of Node5
 Node4 is parent of Node6
 Node4 is parent of Node7
 Node9 is parent of Node10

JTreeの作成に使用できるTreeModel、HashTable、Objectなどの作成に苦労しています。

私はこの問題に1週間以上悩まされており、今は他の人の経験を実際に利用することができました。

4

2 に答える 2

2

データを次の列に整理します。

CREATE TABLE tree_node
(NodeID int,
ParentID int,
Value varchar(250)
...) //as many values per node as you want

これにより、レコードセットをトラバースしてJTreeにデータを取り込むことができます。

深さ優先幅優先の両方のツリー走査を見てください。

于 2012-04-04T16:31:25.253 に答える
2

私はJavaを初めて使用するので、この問題について調査する必要がありました。研究は本当に時間がかかりました。次のリンクには、SQLデータからJTreeを作成するための最良のソリューションがあることがわかりました。

https://forums.oracle.com/forums/thread.jspa?threadID=2225475

これが私が問題を解決するために使用したコードです

class myTree extends JPanel {

private DefaultMutableTreeNode rootNode;
private DefaultTreeModel treeModel;

public myTree() {

    super(new GridLayout(1, 1)); //Set the layout for the panel that the jtree.

    //The following object is a sample from a database and was used to validate 
    //the solution below. Make sure the table is properly sorted before you create the 
    //the object from the query.
    Object[][] table = {
        {1, null, "Root"}, //i=0
        {2, 1, "Node2"}, //i=1
        {3, 2, "Node3"}, //i=2
        {4, 3, "Node4"}, //i=3
        {5, 4, "Node5"}, //i=4
        {6, 5, "Node6"}, //i=5
        {7, 6, "Node7"}, //i=6
        {8, 1, "Node8"}, //i=7
        {9, 1, "Node9"}, //i=8
        {10, 9, "Node10"},};    //i=9

    //Create as many nodes as there are rows of data.
    DefaultMutableTreeNode[] node = new DefaultMutableTreeNode[table.length];
    for (int i = 0; i < table.length; i++) {
        node[i] = new DefaultMutableTreeNode(table[i][2].toString());
    }

    rootNode = node[0];   //Set the root node

    //Cycle through the table above and assign nodes to nodes
    for (int i = 0; i < table.length; i++) {
        for (int j = 1; j < table.length; j++) {
            if (table[i][0] == table[j][1]) {
                System.out.println(table[i][2].toString() + " is parent of " + table[j][2].toString());
                node[i].add(node[j]);
            }
        }
    }
    //Creating the tree model. setting the root node.
    treeModel = new DefaultTreeModel(rootNode);
    //Setting the tree model to the JTree
    JTree tree = new JTree(treeModel);
    //adding the tree to the JPanel
    add(tree);
}
于 2012-04-07T21:36:41.217 に答える