2016-06-20 2 views
0

Step1-まず、最初のJtreeを作成します。Javaで2つのJTreeを等しい/割り当てます。

ステップ2 - このJtreeを使用して、JTreeのセットを作成し、計算された重量値でHashMapに追加しました。

ステップ3 - 次に、このHashMapから1つのJTreeを選択します。

ステップ4 - これをステップ2からステップ3まで繰り返します。

私は今後の手順のために選択したツリーのみを取りたいと思っています。 しかし、最終的なHashMapをTreeをReaping手続きに追加します。同じツリーを更新し、HashMapに追加しました。

 public class JavaTree extends JFrame { 

      public static HashMap<String, DefaultMutableTreeNode> nodeReg = new HashMap<String, DefaultMutableTreeNode>(); 

      public static void main(String[] args) { 

      } 

      public JTree method1() { 

       HashMap<JTree, Double> value = new HashMap<JTree, Double>(); 

       //create tree root 
       DefaultMutableTreeNode Treeroot = new DefaultMutableTreeNode(new NodeInfor3(rootNode,x1)); 

       //create tree 
       JTree firstTree = new JTree(Treeroot); 
       add(firstTree); 

       // create the child nodes 
       DefaultMutableTreeNode node1 = new DefaultMutableTreeNode(new NodeInfor3(nodeName1, x2)); 
       DefaultMutableTreeNode node2 = new DefaultMutableTreeNode(new NodeInfor3(nodeName2), x3)); 
       nodeReg.put(rootNode, Treeroot); 
       nodeReg.put(nodeName1), node1); 
       nodeReg.put(nodeName2, node2); 

       Treeroot.add(node1); 
       Treeroot.add(node2); 

       this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       this.setTitle("First JTree"); 
       this.pack(); 
       this.setVisible(true); 



       for (Map.Entry m1 : newNodeSet.entrySet()) {-----forloop X 

        for (Map.Entry m3 : TargetNodes.entrySet()) { -----forloop Y 

         DefaultMutableTreeNode targetNode = nodeReg.get(nodeName3); 

         targetNode.add(newAddingNode); 

         tree2 = new JTree(Treeroot); 
         add(tree2); 


         //ADD TO CALCULATION 

         WeghtOfSubTrees.put(tree2, calculated value)); 

        } 

        //find maximum value with tree-using WeightOfSubTrees HashMap 
        I take selected Jtree name as a SELECTEDTREE 
    -------------------------------------------------------------------------    
        //THEN I WANT TO REPEAT. BUT WANT TO TAKE SELECTED TREE TO ABOVE PROCEDURE. IT TOOK FINAL VALUE OF HASHmAP. 

        tree2.removeAll(); -------------------------------??????? 
        tree2 =SELECTEDTREE;-----------------------??????? 
     -------------------------------------------------------------------------    
        WeghtOfSubTrees.clear(); 

       } 

       this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       this.setTitle("New tree"); 
       this.pack(); 
       this.setVisible(true); 

      } 
     } 

上記のコードに編集ポイントが含まれていました。複雑なコードになるかもしれません。私は新しいJtreeを最初のJtreeに割り当てたいと思う。私はそれのために次のコード部分を使用しました。

    tree2.removeAll(); 
        tree2 =SELECTEDTREE; 

しかし、動作しません。 for loop Xの前に最初に作成したツリーに新しいツリーを割り当てるには?

+1

私は実際にあなたのコードと混同しています。作業コードを投稿できますか? – Beniton

+0

ご返信ありがとうございます。しかし、私のコードは非常に大きいです。そのため、私はそれを要約として追加します。ごめんなさい。私が最後に言及したように、あるJtreeを別のJtreeと等しくする方法はありますか? – Emalka

+1

Okツリー自体を保存する代わりに、モデルを保存してモデルを選択したツリーに渡すことができます。 – Beniton

答えて

1

共有するコードに基づいて、既存のルートにノードを追加し、同じルートに基づいてツリーを作成します。私はクローンやツリーを作る方法を作りました。

private JTree createTree(DefaultMutableTreeNode rootNode) { 
     NodeInfor3 info =(NodeInfor3)rootNode.getUserObject(); 
     //NodeInfor3 node = new NodeInfor3(info.name, info.getSpecVal()); 
     DefaultMutableTreeNode newRoot = new DefaultMutableTreeNode(info); 
     JTree tree = new JTree(newRoot); 
     copyChildren(rootNode, newRoot); 
     return tree; 
    } 

    private void copyChildren(DefaultMutableTreeNode source , DefaultMutableTreeNode target) { 

     for (int i = 0; i < source.getChildCount(); i++) { 
      DefaultMutableTreeNode node = (DefaultMutableTreeNode)source.getChildAt(i); 
      NodeInfor3 info =(NodeInfor3)node.getUserObject(); 
      DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(info); 
      target.add(newNode); 
      if(node.isLeaf() == false){ 
       copyChildren(node, newNode); 
      } 
     } 
    } 

    private void refreshNodeReg(DefaultMutableTreeNode root) { 
     NodeInfor3 node = (NodeInfor3)root.getUserObject(); 
     nodeReg.put(node.getName(), root); 
     for (int i = 0; i < root.getChildCount(); i++) { 
      refreshNodeReg((DefaultMutableTreeNode)root.getChildAt(i)); 
     } 
    } 
+0

正常に動作します。ありがとうございました。 – Emalka

関連する問題