我在搭建一棵树并运行它来获取结果时遇到了一些麻烦,如下图所示。
因此,我应该通过.txt
文件创建一个具有根和子级的树。
这是代码,下面我将简要解释。
public class Tree extends TreeFrame{
Tree() throws FileNotFoundException {
super();
}
private static final long serialVersionUID = 1L;
DefaultTreeModel model;
Nod nod;
static Tree main;
static String filen ="";
public void initTree() throws FileNotFoundException{
filen = "C:/Users/MyComp/workspace/Lab5/src/Lab5/Life.txt";
@SuppressWarnings("resource")
Scanner sc = new Scanner(new File(filen));
sc.nextLine();
ArrayList<DefaultMutableTreeNode> ar = null;
while (sc.hasNextLine()){
String sc2 = sc.nextLine().replace("<", "");
char chr = '/';
if (sc2.charAt(0) != chr){
String[] parts = sc2.split(" ");
String[] parts2 = parts[1].split("=\"");
String[] parts3 = sc2.split(">");
nod = new Nod(parts2[1].substring(0, parts2[1].length() - 2), parts[0], parts3[1]);
ar = new ArrayList<DefaultMutableTreeNode>();
for (int i = 0; i < nod.getDepth(); i++){
ar.add(nod);
}
}
buildTree(ar);
}
}
void buildTree(ArrayList<DefaultMutableTreeNode> a){
model = new DefaultTreeModel (a);
tree = new JTree(model);
tree.setBackground(Color.green);
}
void showDetails(TreePath path){
if (path == null)
return;
int a = path.getPathCount()-1;
DefaultMutableTreeNode b = (DefaultMutableTreeNode) path.getPathComponent(a);
String info = ((Nod) b).getText();
JOptionPane.showMessageDialog(this, info);
}
public static void main(String[] args) throws FileNotFoundException{
if(args.length>0){
filen=args[0];
}
main = new Tree();
}
}
Nod
只是使对象具有名称,级别和文本的类。因此,主要思想是导入文件->读取文件->创建文件的对象->创建数组并在其中添加“节点” /对象->通过array /创建
TreeModel
“节点”->通过TreeModel
创建树(如您所见)->并使用扩展名运行它以获取GUI。但是我在ArrayList<DefaultMutableTreeNode>
上收到语法错误。看到问题了吗?
最佳答案
直接的问题是没有任何DefaultTreeModel
构造函数接受ArrayList
作为参数。参见文档here。
我认为您可能需要阅读有关如何使用JTree
的tutorial。