【问题标题】:Dynamic initialization of JTreeJTree的动态初始化
【发布时间】:2014-06-19 14:00:44
【问题描述】:

在谈到JTree 时,我一直在用头撞砖墙好几天!

我想创建一个JTree,它在运行时从 mp3 标签动态获取其内容。到目前为止一切顺利,除了我在填充 JTree 时非常头疼。经过大量的实验,我终于放弃并寻求帮助。我一直在使用我在下面创建的类来试验将子节点添加到JTree 中现有节点的方法。我遇到的问题在 try 块内,类型不兼容。我收到的错误是:

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

treeModel.insertNodeInto 需要 MutableTreeNode 作为其第二个参数。我用来获取第二个参数的父节点的方法,rootNode.getChildAt() 返回TreeNode

这里面还有吗???现在有人知道为什么getChildAt() 返回一个TreeNode 对象而不是DefaulMutableTreeNode,对象类型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()
    {

    }

}

【问题讨论】:

    标签: java swing jtree treemodel


    【解决方案1】:

    treeModel.insertNodeInto 需要 MutableTreeNode 作为其第二个参数。我用来获取第二个参数的父节点的方法,rootNode.getChildAt() 返回 TreeNode。

    您正在构建树,并且您知道将 DefaultMutableTreeNodes 插入到树中,因此只需将 TreeNode 转换为 DefaultMutableTreeNode:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 2013-03-19
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多