如何在JUNG中修改图形外观

时间:2019-03-07 15:47:47

标签: java graph jung

我正在尝试使用JUNG库可视化树形图。

我使用的代码是:

    JPanel base = new JPanel();

    Graph<String, String> grafo = OntologyGraph.getGraph(ontology);

    Layout<String, String> layout = new TreeLayout<String, String>((Forest<String, String>) grafo);
    VisualizationViewer<String, String> vv = new VisualizationViewer<String, String>(layout);

    vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller<String>());
    vv.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller<String>());
    vv.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR);

    final DefaultModalGraphMouse<String, Number> graphMouse3 = new DefaultModalGraphMouse<>();
    vv.setGraphMouse(graphMouse3);
    graphMouse3.setMode(DefaultModalGraphMouse.Mode.PICKING);

    base.add(vv);

    return base;

显示此内容
enter image description here

现在,我想用带标签的JButton更改带圆圈的顶点,并扩大它们之间的空间,但是我找不到网上的教程来实现这一点。

2 个答案:

答案 0 :(得分:0)

更改节点之间的间距非常容易;只需使用接受TreeLayoutdistx参数的disty构造函数即可。

JUNG本身不支持为每个节点提供JButton,尽管您可以做一些修改来启用它。

您要通过对节点使用JButton来解决什么问题?

答案 1 :(得分:0)

以下是一些示例代码,可用于打开JFrame,其中包含有关被单击的节点的信息(处于拾取模式时)。如果要使其即使在转换模式下也能响应节点单击,则必须稍微更改graphmouseplugins才能在转换模式下不删除PickingGraphMousePlugin。

    vv.getRenderContext().getPickedVertexState().addItemListener(new ItemListener(){
        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.SELECTED) {
                JFrame frame = new JFrame("Vertex "+e.getItem()+" picked");
                frame.getContentPane().add(new JButton("hello from "+e.getItem()));
                frame.setSize(new Dimension(200,100));
                frame.setLocation(200, 200);
                frame.setVisible(true);
            }
        }
    });

如果您希望顶点看起来更像矩形按钮,则VertexLableAsShapeDemo可能会有所帮助。该演示使用JLabel绘制顶点