如何在JUNG中修改图形外观

问题描述 投票:0回答:2

我正在尝试使用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更改带圆圈的顶点并扩大它们之间的空间,但我找不到网上的教程来实现这一点。

java graph jung
2个回答
0
投票

改变节点之间的间距很容易;只需使用接受TreeLayoutdistx参数的disty构造函数。

为每个节点提供JButton并不是JUNG原生支持的东西,尽管你可以做一些黑客来启用它。

使用JButtons进行节点尝试解决的问题是什么?


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绘制顶点

© www.soinside.com 2019 - 2024. All rights reserved.