【问题标题】:JUNG: placing tree nodes in orderJUNG:按顺序放置树节点
【发布时间】:2012-04-26 20:29:59
【问题描述】:

向我的DelegateTree 添加节点时,它们不会按照我添加它们的顺序在视觉上出现。 我一直在寻找解决方案,但还没有找到任何东西。 有没有人知道怎么改?

提前致谢!

编辑:我的代码

/**
 * Generate a visualization of the decision tree.
 * 
 * @param tree
 *            The decision tree
 * @return A component to be placed inside a JPanel
 */
public static GraphZoomScrollPane generateTree(Tree tree,
        GraphicalUserInterface gui) {

    /* Create a new tree */
    DelegateTree<Node, Edge> graphTree = new DelegateTree<Node, Edge>();

    /* Add all nodes and vertices to the tree */
    graphTree.addVertex(tree.getRoot());
    addChildren(tree.getRoot(), graphTree);

    /* Create the visualization */
    DynamicTreeLayout<Node, Edge> treeLayout = new DynamicTreeLayout<Node, Edge>(graphTree, 100, 100);
    VisualizationViewer<Node, Edge> vv = new VisualizationViewer<Node, Edge>(
            treeLayout);
    vv.setDoubleBuffered(true);
    vv.setBackground(Color.WHITE);
    vv.getRenderContext().setEdgeLabelTransformer(
            new ToStringLabeller<Edge>());
    vv.getRenderContext().setEdgeShapeTransformer(
            new EdgeShape.Line<Node, Edge>());
    vv.getRenderContext().setVertexLabelTransformer(
            new ToStringLabeller<Node>());
    vv.getRenderer().getVertexLabelRenderer()
            .setPosition(Renderer.VertexLabel.Position.S);

    vv.addGraphMouseListener(new ClickNode(gui, vv));

    final DefaultModalGraphMouse<Node, Edge> graphMouse = new DefaultModalGraphMouse<Node, Edge>();

    graphMouse.setMode(ModalGraphMouse.Mode.TRANSFORMING);

    vv.setGraphMouse(graphMouse);

    final GraphZoomScrollPane gzsp = new GraphZoomScrollPane(vv);

    return gzsp;
}

/**
 * Recursively add all nodes and edges to the tree.
 * 
 * @param node
 *            The parent node
 * @param tree
 *            The tree visualization
 */
private static void addChildren(Node node, DelegateTree<Node, Edge> tree) {
    for (int i = 0; i < node.getChildren().size(); i++) {
        tree.addChild(new Edge(node.getChildren().get(i).getEdgeLabel()), node, node
        .getChildren().get(i));
        addChildren(node.getChildren().get(i), tree);
    }
}

【问题讨论】:

    标签: java tree visualization jung


    【解决方案1】:

    使用 DelegateTree 的底层实现,该实现要么根据顶点的自然顺序 (*Sorted*Graph) 对其顶点进行排序,要么使用插入顺序 (*Ordered*Graph)。

    【讨论】:

    • 查看 DelegateTree javadocs。您需要在您要委托的 (Directed)Graph 实例中传递的构造函数中的参数。
    • dylan202:你是怎么做到的?请把你的代码贴出来好吗?
    • 好的,我自己做的,这样:private Forest my_graph_model = new DelegateForest(new DirectedOrderedSparseMultigraph());
    猜你喜欢
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    相关资源
    最近更新 更多