gpt4 book ai didi

java - JTree的动态初始化

转载 作者:行者123 更新时间:2023-12-01 12:49:55 24 4
gpt4 key购买 nike

谈到 JTree 时,我已经用头撞砖墙好几天了!

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

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

}

}

最佳答案

treeModel.insertNodeInto requires MutableTreeNode for its second argument. The method im using to get the parent node for the second argument, rootNode.getChildAt() returns TreeNode.

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

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

关于java - JTree的动态初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24308479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com