2014-06-19 11 views
0

JTree 일 동안 벽돌 벽에 머리를 대고있었습니다.JTree의 동적 초기화

런타임에 mp3 태그에서 내용을 동적으로 가져 오는 JTree을 만들고 싶습니다. 지금까지는 JTree를 채울 때 엄청 두통이있는 것을 제외하고는 매우 좋았습니다. 마침내 많은 실험이 끝나면 도움을 청합니다. 아래에서 생성 한 클래스를 사용하여 JTree 내의 기존 노드에 하위 노드를 추가하는 방법을 실험 해 보았습니다. 메신저 문제는 try 블록 내에 있고 형식이 호환되지 않습니다. 오류 메신저 잡은 다음과 같습니다

error: incompatible types: `TreeNode` cannot be converted to `MutableTreeNode` 

treeModel.insertNodeInto는 두 번째 인수에 대한 MutableTreeNode이 필요합니다. 두 번째 인수 인 rootNode.getChildAt()에 대한 부모 노드를 가져 오는 데 사용하는 메쏘드는 TreeNode을 반환합니다.

어쨌든이 주변에 있습니까 ??? 아무도 지금 getChildAt()DefaulMutableTreeNode이 아닌 TreeNode 오브젝트를 반환하는 이유는 무엇입니까? rootNode은 ???으로 초기화됩니다.

package jtreeex; 

import java.util.Enumeration; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTree; 
import javax.swing.tree.DefaultMutableTreeNode; 
import javax.swing.tree.DefaultTreeModel; 
import javax.swing.tree.TreeSelectionModel; 

/** 
* 
* @author david 
*/ 
public class JTreeEx implements Runnable 
{ 

    public JTreeEx() 
    { 
     JFrame jfrm = new JFrame(); 
     JPanel panel = new JPanel(); 
     JTree tree; 

     DefaultMutableTreeNode rootNode; 
     rootNode = new DefaultMutableTreeNode("Audio"); 
     DefaultTreeModel treeModel = new DefaultTreeModel(rootNode); 
     treeModel.addTreeModelListener(new MyTreeModelListener()); 

     tree = new JTree(treeModel); 
     tree.setEditable(true); 
     tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); 
     tree.setShowsRootHandles(true); 
     String [] anArray = {"Dogs", "Cats"}; 


     // Inserts new root nodes from anArray 
     for(int i = 0; i < anArray.length; i++) 
     { 
      treeModel.insertNodeInto(new DefaultMutableTreeNode(anArray[i]), 
        rootNode, rootNode.getChildCount()); 

     } 

     // Get enumeration of children of rootNode 
     Enumeration eNum = rootNode.children(); 

     try 
     { 
      while(eNum.hasMoreElements() == true) 
      { 
       treeModel.insertNodeInto(new DefaultMutableTreeNode("Toby"), 
         rootNode.getChildAt(1), rootNode.getChildCount()); 
      } 
     } 
     catch (Exception e) 
     { 
      System.out.println("no enums left"); 
     } 

     panel.add(tree); 

     jfrm.add(panel); 
     jfrm.setSize(400,200); 
     jfrm.setVisible(true); 
     jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     // TODO code application logic here 

     (new Thread(new JTreeEx())).start(); 
    } 

    public void run() 
    { 

    } 

} 

답변

1

는 treeModel.insertNodeInto는 두 번째 인수에 대해 MutableTreeNode가 필요합니다. 메소드 메신저는 두 번째 인자 인 부모 노드를 얻기 위해 rootNode.getChildAt()를 사용하여 TreeNode를 반환합니다.

treeModel.insertNodeInto(new DefaultMutableTreeNode("Toby"), 
    (DefaultMutableTreeNode)rootNode.getChildAt(1), rootNode.getChildCount()); 
:

당신은 트리를 구축하고 당신이 나무에 DefaultMutableTreeNodes를 삽입하는 것을 알고, 그래서 그냥 DefaultMutableTreeNode에로 TreeNode를 캐스팅