Как добавить настраиваемые вершин -метки в визуализацию графика Jung?

StackOverflow https://stackoverflow.com/questions/9350583

  •  27-10-2019
  •  | 
  •  

Вопрос

Как использовать пользовательские метки вершины в Юнг Визуализация графика?

Я следую Учебник Jung 2.0 где я нашел это 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");

Другие советы

Если у вас есть пользовательский класс для узлов, я приведу пример из своего проекта. У меня есть узел класса, который похож на:

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;
                }});

// Он покажет свойство экрана в качестве метки для каждого узла на графике. // Я надеюсь, что это то, что вы ищете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top