1

まず、私は netbeans を使用しており、Java GUI ゲーム全体に慣れていないと言わなければなりません。

したがって、私の問題は、自分のプロジェクトに固有の独自のツリー構造を作成したことであり、自分の構造を使用して JTree を構築したいと考えています。

私は Jtree のトピックについて読んでいましたが、理解していることから、TreeModel インターフェイスを構造に実装する必要があります。私が読んだもう1つの方法は、 DefaultMutableTreeNode を使用することでしたが、それを使用した明確な例が見つかりません。

現在、ツリー構造全体を構築してデータで埋めており、再構築を避けようとしています。ツリーを Jtree に実装するにはどうすればよいですか?

package models;

import java.util.ArrayList;
import java.util.List;


public class IngredientTree {

   private Node root;


    public IngredientTree(){
        root = new Node();
    }
    public IngredientTree(Node rootData) {
        root = rootData;
    }

    public void setRoot(Node n){
        root = n;
    }

    public Node getRoot(){
        return root;
    }

    public void addToTree(Ingredient i){
        if(root.getData().getName()=="") // Then it must be the root 
            root.setData(i);
        else
            addToTree(root,i);
    }
    private void addToTree(Node n, Ingredient i){
        if(isFirstAdd(n)) //Has no parent and no children
            n.addChild(new Node(i,n));
        else if(n.hasChildren()){ //Has parent and children
            if(!inChildren(n,i)){
                if(inNode(n,i))
                    n.addChild(new Node(i,n));
            }
            else{
                for(Node child : n.getChildren()){
                    addToTree(child,i);
                }
            }
        }
        else{ //Has parent but no children
            n.addChild(new Node(i,n));
        }
    }
    private boolean isFirstAdd(Node n){
        return(!n.hasParent() && !n.hasChildren());
    }
    private boolean inChildren(Node n,Ingredient i){
        for(Node child : n.getChildren()){
            if(inNode(child,i))
                return true;
        }
        return false;
    }

    private boolean inNode(Node n,Ingredient i){
        return(i.getStartIndex() > n.getData().getStartIndex() &&
                i.getEndIndex() < n.getData().getEndIndex());
    }

    public int countIngredients(){
        return countIngredients(this.getRoot());
    }

    private int countIngredients(Node r){
        int count = 0;
        if(!r.hasChildren()){
            return 1;
        }else{
            for(Node child: r.getChildren()){
                count += countIngredients(child);
            }
        }
        return count;
    }
}
4

3 に答える 3

2

ツリー モデルを実装し、その構造に基づいて再構築することをお勧めしますか?

はい。ここFileTreeModelに引用されているは一例です。ツリーの使用方法: データ モデルの作成 で述べたように、「既存のデータ構造の情報を使用するようにツリー モデルを実装するだけで済みます。」

于 2013-01-30T08:36:17.833 に答える