0

何日もレンガの壁に頭をぶつけていましたJTree

JTreemp3 タグから、実行時にコンテンツを動的に取得する を作成したいと考えています。JTree にデータを入力する際に​​大きな頭痛の種になることを除けば、これまでのところ問題はありません。多くの実験の後、アイブはついにあきらめて助けを求めました。以下で作成したクラスを使用して、 内の既存のノードに子ノードを追加する方法を試していますJTree。私が直面している問題は、try ブロック内にあり、型に互換性がありません。受け取ったエラーは次のとおりです。

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

treeModel.insertNodeIntoMutableTreeNode2 番目の引数が必要です。2 番目の引数の親ノードを取得するために使用するメソッドは、 をrootNode.getChildAt()返しますTreeNode

このあたりに何かありますか???そして、オブジェクト型が次のように初期化されているのに、なぜオブジェクトをgetChildAt()返すのですか?TreeNodeDefaulMutableTreeNoderootNode

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

    }

}
4

1 に答える 1

1

treeModel.insertNodeInto には、2 番目の引数として MutableTreeNode が必要です。2 番目の引数の親ノードを取得するために使用するメソッド rootNode.getChildAt() は、TreeNode を返します。

ツリーを構築していて、DefaultMutableTreeNodes をツリーに挿入していることはわかっているので、TreeNode を DefaultMutableTreeNode にキャストするだけです。

treeModel.insertNodeInto(new DefaultMutableTreeNode("Toby"), 
    (DefaultMutableTreeNode)rootNode.getChildAt(1), rootNode.getChildCount());
于 2014-06-19T14:48:03.353 に答える