Dil*_*ini 5 java swing visualizer jung
如何在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);
}
}
Run Code Online (Sandbox Code Playgroud)
如何添加"q0"等标签?
既然你已经定义的泛型SparseMultigraph<V, E>
作为SparseMultigraph<Integer, String>
其中通用V
顶点作为整数和边缘一般é作为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()
{
}
}
Run Code Online (Sandbox Code Playgroud)
// 你只需要像下面这样覆盖转换:
vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller() {
@Override
public String transform(Object v) {
return ((Node)v).screenName;
}});
Run Code Online (Sandbox Code Playgroud)
// 它将显示 screenName 属性作为图中每个节点的标签。// 我希望这就是您正在寻找的。
归档时间: |
|
查看次数: |
4465 次 |
最近记录: |