Dynamically populating the tree model from a text file in JTree

风格不统一 提交于 2019-12-08 11:29:28

This might be a bit cleaner. Just adapt the function for calculating the level ...

public static final DefaultMutableTreeNode getTreeNode(File file) throws IOException  {

    DefaultMutableTreeNode rootNode = null;
    Map<Integer, DefaultMutableTreeNode> levelNodes = new HashMap<Integer, DefaultMutableTreeNode>();
    BufferedReader reader = new BufferedReader(new FileReader(file));
    String line;

    while( (line = reader.readLine()) != null ) {

        int level = getLevel(line);
        String nodeName = getNodeName(line, level);
        DefaultMutableTreeNode node = new DefaultMutableTreeNode(nodeName);               
        levelNodes.put(level, node);
        DefaultMutableTreeNode parent = levelNodes.get(level - 1);

        if( parent != null ) {
            parent.add(node);
        }
        else {
            rootNode = node;
        }
    }    
    reader.close();
    return rootNode;
}

private static final int getLevel(String line) {

    int level = 0;
    for ( int i = 0; i < line.length(); i++ ) {
        char c = line.charAt(i);
        if( c == '\t') {
            level++;
        }
        else {
            break;
        }
    }
    return level;
}

private static final String getNodeName(String line, int level) {
    return line.substring(level);
}      

There is a github project for creating TreeModels from a Collection of data if that helps.

Example below on building a TreeModel from a List of Book Objects.

List<Book> bookList = new ArrayList<>();

CollectionTreeModel<Book> treeModel = new CollectionTreeModel
        .Builder<>(bookList)
        .addNode(b -> b.publisher)
        .addNode(b -> b.author)
        .addNode(b -> b.title)
        .build();

JTree jTree = new JTree(treeModel);

Assumes Book is in same package and looks like...

public class Book {
    final String publisher;
    final String author;
    final String title;

    Book(String publisher, String author, String title) {
        ...
    }
}

For more info:

https://github.com/mnrussell/collectionTreeModel

Bit late but hope this helps :o)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!