2016-06-20 1 views
0

Step1- 먼저 첫 번째 Jtree를 만듭니다.자바에서 두 개의 JTree를 균등하게/할당하십시오.

2 단계 -이 Jtree를 사용하여 JTree 집합을 만들고 계산 된 가중치를 사용하여 HashMap에 추가했습니다.

3 단계 -이 HashMap에서 하나의 JTree를 선택합니다.

4 단계 이제 2 단계에서 3 단계까지 반복하고 싶습니다.

나중에 다시 시도하십시오. 미래의 절차를 위해 선택한 트리 만 가져 가고 싶습니다. 하지만 마지막 HashMap을 사용하여 수확 절차에 트리를 추가합니다. 같은 트리를 업데이트하고 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