Java JUNG:更改顶点颜色
我曾使用JUNG library通过图形将一个由服务器和链接组成的网络可视化 所以我像这样初始化我的图,服务器和链接是我项目中的类:Java JUNG:更改顶点颜色,java,jung,Java,Jung,我曾使用JUNG library通过图形将一个由服务器和链接组成的网络可视化 所以我像这样初始化我的图,服务器和链接是我项目中的类: Graph<Server, Link> g; g = new SparseMultigraph<Server, Link>(); 我更新图表的完整代码如下: 专用静态基本可视化服务器更新图(网络){ Set servers=network.getServers(); Set links=network.g
Graph<Server, Link> g;
g = new SparseMultigraph<Server, Link>();
我更新图表的完整代码如下:
专用静态基本可视化服务器更新图(网络){
Set servers=network.getServers();
Set links=network.getLinks();
图g;
//图中V是顶点的类型,E是顶点的类型
//边缘
g=新的SparseMultraph();
//添加一些顶点和边
用于(服务器:服务器){
g、 addVertex(服务器);
}
int i=0;
用于(链接:链接){
g、 addEdge(link,link.getSource(),link.getDest(),EdgeType.DIRECTED);
i++;
}
//布局,可视化查看器
布局=新的环形布局(g);
布局。设置尺寸(新尺寸(300300));
VisualizationViewer vv=新建VisualizationViewer(
布局);
vv.setPreferredSize(新尺寸(350350));
//显示顶点和边标签
vv.getRenderContext().setVertexLabelTransformer(新ToStringLabeler());
vv.getRenderContext().setEdgeLabelTransformer(新的ToStringLabeller());
//设置一个新顶点以绘制变换器。。。
Transformer vertexPaint=新的Transformer(){
公共绘制变换(整数i){
返回颜色。绿色;
}
};
vv.getRenderContext().setVertexFillPaintTransformer(顶点绘制);
//创建图形鼠标并将其添加到可视化组件
DefaultModalGraphMouse gm=新的DefaultModalGraphMouse();
gm.setMode(ModalGraphMouse.Mode.TRANSFORMING);
vv.setGraphMouse(gm);
右面板。设置顶部组件(vv);
//检测顶点的选择
最终PickedState PickedState=vv.getPickedVertexState();
//附加将在顶点选择更改时打印的侦听器。
pickedState.addItemListener(新的ItemListener(){
@凌驾
公共无效itemStateChanged(ItemEvent e){
Object subject=e.getItem();
//该图对顶点使用整数。
if(subject instanceof Integer){
整数顶点=(整数)主题;
if(pickedState.isPicked(顶点)){
System.out.println(“顶点”+顶点
+“现在被选中”);
}否则{
System.out.println(“顶点”+顶点
+“不再选定”);
}
}
}
});
返回vv;
}
您的图形顶点类型是服务器
,但您的转换器
需要一个整数
作为输入。您需要修改代码,使之匹配。什么版本?链接到图书馆?我在“当前”JUNG Javadocs中没有看到转换器
或绘制
。JUNG 2.0.1 JUNG 2依赖于其他三个库:JUnit、Colt和Common Collections。1.朱尼特:2。Commons Collections:这源于ApacheJakarta Commons Collections 3。Colt:变压器
和油漆
的完全限定类名?另外,请发布整个堆栈跟踪,而不仅仅是您得到的是ClassCastException
.import org.apache.commons.collections15.Transformer;导入java.awt.Paint;好的…我会把完整的错误公布在你的帐户上。我知道这一点…但我需要将顶点类型作为服务器,而不是整数…因为这在我想要显示图形时有效,但在我想要更改顶点颜色时有问题!我没说你必须改变你的顶点类型。为什么您的转换器
声明为
而不是
?我无法更改,因为setVertexFillPaintTransformer需要转换器作为输入!!如果图形是
,为什么要将VisualizationViewer
声明为
?您是否在没有进行一致修改的情况下复制并粘贴了大量代码块?谢谢。实际上它是第一个整数和字符串,你是对的。我把它们都改了,现在可以用了!
Transformer<Integer,Paint> vertexPaint = new Transformer<Integer,Paint>() {
public Paint transform(Integer i) {
return Color.GREEN;
}
};
vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: network.Server cannot be cast to java.lang.Integer
at GUI.GUI$9.transform(GUI.java:1)
at edu.uci.ics.jung.visualization.renderers.BasicVertexRenderer.paintShapeForVertex(BasicVertexRenderer.java:98)
at edu.uci.ics.jung.visualization.renderers.BasicVertexRenderer.paintIconForVertex(BasicVertexRenderer.java:74)
at edu.uci.ics.jung.visualization.renderers.BasicVertexRenderer.paintVertex(BasicVertexRenderer.java:37)
at edu.uci.ics.jung.visualization.renderers.BasicRenderer.renderVertex(BasicRenderer.java:70)
at edu.uci.ics.jung.visualization.renderers.BasicRenderer.render(BasicRenderer.java:55)
at edu.uci.ics.jung.visualization.BasicVisualizationServer.renderGraph(BasicVisualizationServer.java:367)
at edu.uci.ics.jung.visualization.BasicVisualizationServer.paintComponent(BasicVisualizationServer.java:321)
at javax.swing.JComponent.paint(Unknown Source)
Set<Server> servers = network.getServers();
Set<Link> links = network.getLinks();
Graph<Server, Link> g;
// Graph<V, E> where V is the type of the vertices and E is the type of
// the edges
g = new SparseMultigraph<Server, Link>();
// Add some vertices and edges
for (Server server : servers) {
g.addVertex(server);
}
int i = 0;
for (Link link : links) {
g.addEdge(link, link.getSource(), link.getDest(), EdgeType.DIRECTED);
i++;
}
// Layout<V, E>, VisualizationViewer<V,E>
Layout<Integer, String> layout = new CircleLayout(g);
layout.setSize(new Dimension(300, 300));
VisualizationViewer<Integer, String> vv = new VisualizationViewer<Integer, String>(
layout);
vv.setPreferredSize(new Dimension(350, 350));
// Show vertex and edge labels
vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
vv.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller());
// Setup up a new vertex to paint transformer...
Transformer<Integer,Paint> vertexPaint = new Transformer<Integer,Paint>() {
public Paint transform(Integer i) {
return Color.GREEN;
}
};
vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);
// Create a graph mouse and add it to the visualization component
DefaultModalGraphMouse gm = new DefaultModalGraphMouse();
gm.setMode(ModalGraphMouse.Mode.TRANSFORMING);
vv.setGraphMouse(gm);
rightPanel.setTopComponent(vv);
//Detecting selection of vertices
final PickedState<Integer> pickedState = vv.getPickedVertexState();
// Attach the listener that will print when the vertices selection changes.
pickedState.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
Object subject = e.getItem();
// The graph uses Integers for vertices.
if (subject instanceof Integer) {
Integer vertex = (Integer) subject;
if (pickedState.isPicked(vertex)) {
System.out.println("Vertex " + vertex
+ " is now selected");
} else {
System.out.println("Vertex " + vertex
+ " no longer selected");
}
}
}
});
return vv;
}