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()
{
}
}