2009-08-03 11 views
0

私はちょうど次の質問を投稿しましたが、間違いました。私が望むのは、Eclipseの使い方ではなく、ツリーのような構造を構築する方法です。要素は複数の子を持つことができます。 木を作る方法を教えてください。それは実際に木ではありませんが、以下に示すように構造を構築することです。ありがとう木のような構造を構築する

私はこの問題を自分のアプリケーションで避けており、助けが必要です。私は、このフォーム

食品リンゴ果実の種子などにサーバーからデータを持っている...

表議長ペンスクールら..

...

食品マンゴーメロンなどのピア..

左から読んで、私は例を作りたいと思っています。最初の行のアップル

の、

食品親

シード

のフルーツ

フルーツ親のアップルの親と、より多くのデータなどがある場合..私は、上記のデータの上にitereateますループを持つサーバーから。例:::

+Food 
    Apple 
     Fruit 
      Seed 
      etc.. 

+Table 
     Chair 
      Pen 
      School 
       etc.. 

上記のコードでは、「食品」と「表」は同じレベルに属しています。私の問題はどうやって始めるのですか?私は一日中グーグルで探せましたが、私が本当に理解しているものは見つけられません。私は、例えば、 "食べ物"の親を作り、Appleをその子にしてから、FruitをAppleの子などにすることができます。ツリーの構築方法を教えてください。

あなたの助けが必要です。

おかげ

答えて

0

は、ノードと呼ばれるクラスを作成し、ノードは、ノードのArrayListの親ノードを含む変数があることを確認してください。このように:

class Node { 

private List<Node> children; 
private Node parent; 

public Node() { 
    children = new ArrayList<Node>(); 
} 
//Constructors, accessors, mutators, etc. 

} 

これははるかに簡単な方法です。あなたはノードを抽象クラスにしてから、椅子、机、学校などを持ってノードをすべて拡張することができます。

public class School extends Node { 

    public School() { 
     super(); 
    } 

    public void addChild(Node node) { 
     children.add(node);  
    } 

    public void setParent(Node node) { 
     parent = node; 
    } 
} 

編集:私は子供を追加したり、親を設定するために発生する必要があるものをお見せするためにいくつかのサンプルのメソッドを追加しました。他のクラスでは、スクール、デスクなどのオブジェクトを作成し、addChildメソッドとsetParentメソッドを作成して、ノードに子を追加したり、ノードの親を設定することができます。

+0

感謝。椅子、机などを追加している場合は、どうやってお互いに子どもになるのですか?私の内部の仕組みを私に説明してもらえますか?事実、これはこれを初めて使ったときのことなので、まったく混乱します。私はそれをよく理解できるように説明をしてください。ありがとう –

+0

本当にありがとう。私は今あなたが何を意味しているのか理解しました。大いに感謝する。もう一つ質問があります。ごめんなさい。私は、サーバーから取得したデータは次のように配列している: 学校は次のようになります。 [スクール表議長帳] は、私の質問は、私がデータをループiのようにツリー状の構造を作成できることができるようにする方法です"テーブル"の親 "議長"の表親 "本"の議長親。 for()ループまたはwhile()ループを使用してツリー構造を作成するための要素をループする方法がわかりません。あなたのアドバイスが必要です。 私を助けてくれてありがとう。 –

+0

prevNodeなどの変数を使用して、配列内の前の要素を追跡します。最初にループを開始するとき、prevNodeはnullなので、Schoolノードを作成し、親を設定しないでください(親には親がないので)。また、prevNodeをSchoolと同じに設定します。次に、再度ループするときは、Tableの親をprevNode(Schoolと同じ)に設定し、Tableを学校の子のリストに追加します。 forループでこれをすべて行うと、配列内のすべての要素に対して機能するはずです。 – AlbertoPL

1

javax.swing.tree.DefaultMutableTreeNodeクラスを使用できます。それはスイングパッケージに含まれていますが、グラフィックコードは含まれていません。

+0

素敵な、私はいつもプロのデザインがJavaのツリー構造をどのようにしているかを知りたがっています – kristianlm

1

各ノードが人間が読めるString名を持ち、0個以上の子ノードを参照する単純な実装です。

public interface Node { 
    String getName(); 

    void addChild(Node node); 

    List<? extends Node> getChildren(); 
} 

public class NodeImpl implements Node { 
    private final String name; 
    private final List<Node> nodes; 

    public NodeImpl(String name) { 
    this.name = name; 
    this.nodes = new LinkedList<Node>(); 
    } 

    public String getName() { 
    return name; 
    } 

    public void addChild(Node node) { 
    nodes.add(node); 
    } 

    public List<? extends Node> getChildren() { 
    return Collections.unmodifiableList(nodes); 
    } 
} 

使用例は次のようになります。ご返信用

Node root = new Node("Root"); // Create root node. 
Node food = new Node("Food"); // Create level 1 child nodes. 
Node table = new Node("Table"); 

root.addChild(foo); // Add level 1 child nodes to root. 
root.addChild(table); 

Node apple = new Node("Apple"); // Create and add other child nodes. 
food.addChild(apple); // etc. 
+0

私もあなたの返事にとても感謝します。私は、サーバーから取得したデータは次のように配列している: 学校は次のようになります。 [スクール表議長帳] は、私の質問は、私がデータをループiのようにツリー状の構造を作成できることができるようにする方法です"テーブル"の親 "議長"の表親 "本"の議長親。 for()ループまたはwhile()ループを使用してツリー構造を作成するための要素をループする方法がわかりません。あなたのアドバイスが必要です。 私を助けてくれてありがとう。 –

関連する問題