簡體   English   中英

如何在JUNG圖形可視化中添加自定義頂點標簽?

[英]How to add custom vertex labels in JUNG graph visualization?

如何在JUNG圖形可視化中使用自定義頂點標簽?

我遵循Jung 2.0 Tutorial ,我發現setVertexLabelTransformer()可用於標記頂點,但據我所知,這些標簽無法自定義。

例如,下面的代碼生成三個頂點,頂點標簽1,2,4:

import edu.uci.ics.jung.algorithms.layout.CircleLayout;
import edu.uci.ics.jung.algorithms.layout.Layout;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.graph.SparseMultigraph;
import edu.uci.ics.jung.visualization.BasicVisualizationServer;
import java.awt.Dimension;
import javax.swing.JFrame;

public class SimpleGraphView {
    Graph<Integer, String> g;

    public SimpleGraphView() {       
        g = new SparseMultigraph<Integer, String>();
        g.addVertex((Integer)1);
        g.addVertex((Integer)2);
        g.addVertex((Integer)4); 
    }

    public static void main(String[] args) {
        SimpleGraphView sgv = new SimpleGraphView(); 
        Layout<Integer, String> layout = new CircleLayout(sgv.g);
        layout.setSize(new Dimension(800,800));  
        BasicVisualizationServer<Integer,String> vv =
            new BasicVisualizationServer<Integer,String>(layout);
        vv.setPreferredSize(new Dimension(850,850)); 

        JFrame frame = new JFrame("Simple Graph View");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(vv); 
        frame.pack();
        frame.setVisible(true);       
    }
}

如何添加“q0”等標簽?

由於您已將SparseMultigraph<V, E>的泛型定義為SparseMultigraph<Integer, String> ,其中頂點的泛型V為整數,邊的泛型E為String ,因此每個頂點的標簽值都在Integer ,每個邊的標簽在String 因此,如果您希望每個頂點都有q1,v2等名稱,請使用String作為泛型V ,這樣就可以傳遞一個頂點名稱,如g.addVertex("q1");

如果您有節點的自定義類,我將從我的項目中給出一個示例。 我有一個類Node,如:

public class Node 
{

public long tweetId = 0L;
public long nodeId = 0L;
public String screenName = "";
public Date reTweetDate = new Date();
public boolean isMainNode = false;
public int size = 0;

public Node()
{
}

}

//你只需要覆蓋如下變換:

vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller() {
                @Override
                public String transform(Object v) {

                    return ((Node)v).screenName;
                }});

//它將screenName屬性顯示為圖表中每個節點的標簽。 //我希望這就是你要找的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM