JUNG基于顶点属性折叠顶点

时间:2013-11-29 16:00:34

标签: java jung

我已经在我的GUI中添加了崩溃顶点函数,如:

private void collapseByVillageButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                        
    // TODO add your handling code here:
    showReligionCheckBox.setEnabled(false);
    showReligionCheckBox.setSelected(false);
    showVillageCheckBox.setEnabled(false);
    showVillageCheckBox.setSelected(false);
    collapseByVillageButton.setEnabled(false);
    collapseByReligionButton.setEnabled(false);
    vv.getRenderContext().setVertexShapeTransformer(religion_none);
    vv.getRenderContext().setVertexFillPaintTransformer(village_none);
    String[] villages = {"a", "b", "c", "d", "e"};
    for (String s : villages) {
        Collection picked = new HashSet();
        for (Potter p : g.getVertices()) {
            if (p.village.equals(s)) {
                picked.add(p);
            }
        }
        if (picked.size() > 1) {
            Graph inGraph = layout.getGraph();
            Graph clusterGraph = collapser.getClusterGraph(inGraph, picked);
            Graph graph = collapser.collapse(layout.getGraph(), clusterGraph);
            double sumx = 0;
            double sumy = 0;
            for (Object v : picked) {
                Point2D p = (Point2D) layout.transform((Potter) v);
                sumx += p.getX();
                sumy += p.getY();
            }
            Point2D cp = new Point2D.Double(sumx / picked.size(), sumy / picked.size());
            vv.getRenderContext().getParallelEdgeIndexFunction().reset();
            layout.setGraph(graph);
            layout.setLocation(clusterGraph, cp);
            vv.getPickedVertexState().clear();
            vv.repaint();
        }
    }

当我按下按钮时,JUNG根据属性“village”的值折叠顶点。这是有效的,虽然我不知道这是否是正确的方法。 我不明白的一件事是:如何更改新的顶点标签,以便显示折叠顶点名称列表更好的内容?

编辑:

我认为这可以解决我的问题:

vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller() {
        @Override
        public String transform(Object v) {
            if (v instanceof Graph) {
                Collection vertices = ((Graph) v).getVertices();
                Potter next = (Potter) vertices.iterator().next();
                return next.village;
            }
            return super.transform(v);
        }
    });

任何提示超过欢迎!

祝你好运, 西蒙

1 个答案:

答案 0 :(得分:1)

您提供折叠顶点的标签,因此它们可以是您喜欢的任何内容。默认情况下,您可能正在使用ToStringLabeller,但您可以通过为可插入渲染器上下文标记变换器提供不同的顶点来交换它。