Jung着色顶点有价值

我现在被Java库Jung困住了。

我显示顶点和边,只有我找不到顶点着色的任何函数,我需要顶点的值,而不是鼠标。

import edu.uci.ics.jung.algorithms.layout.FRLayout; import edu.uci.ics.jung.algorithms.layout.Layout; import edu.uci.ics.jung.graph.Graph; import edu.uci.ics.jung.visualization.BasicVisualizationServer; import edu.uci.ics.jung.visualization.decorators.PickableVertexPaintTransformer; import edu.uci.ics.jung.visualization.decorators.ToStringLabeller; import edu.uci.ics.jung.visualization.renderers.DefaultVertexLabelRenderer; import edu.uci.ics.jung.visualization.renderers.Renderer.VertexLabel.Position; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import javax.swing.JFrame; import org.apache.commons.collections15.Transformer; import org.apache.commons.collections15.functors.ConstantTransformer; public class Design { public Graph g; public Design() { this.g = ProjectTools.readNet("SmallTown.net"); } public static  void main(String[] args) { Design sgv = new Design(); Layout layout = new FRLayout(sgv.g); layout.setSize(new Dimension(800,800)); BasicVisualizationServer vv = new BasicVisualizationServer(layout); Transformer vertexPaint = new Transformer() { public Paint transform(Integer i) { return (Paint) Color.GREEN; } }; vv.setPreferredSize(new Dimension(850,850)); vv.getRenderContext().setVertexLabelRenderer(new DefaultVertexLabelRenderer(Color.green)); vv.getRenderContext().setEdgeDrawPaintTransformer(new ConstantTransformer(Color.white)); vv.getRenderContext().setEdgeStrokeTransformer(new ConstantTransformer(new BasicStroke(2.5f))); vv.getRenderContext().setVertexFillPaintTransformer((Transformer) vertexPaint); vv.getRenderContext().setVertexFillPaintTransformer(new PickableVertexPaintTransformer(vv.getPickedVertexState(), Color.green, Color.yellow)); vv.setBackground(Color.gray); vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller()); vv.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR); JFrame frame = new JFrame("Projet Algo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(vv); frame.pack(); frame.setVisible(true); } } 

我的渲染: 顶点和边缘

我可以看到两个可能的问题; 你正在调用setVertexFillPaintTransformer两次, BasicVisualizationServer似乎不喜欢DefaultModalGraphMouse

试试这个版本:

 import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Paint; import javax.swing.JFrame; import org.apache.commons.collections15.Transformer; import org.apache.commons.collections15.functors.ConstantTransformer; import edu.uci.ics.jung.algorithms.layout.FRLayout; import edu.uci.ics.jung.algorithms.layout.Layout; import edu.uci.ics.jung.graph.Graph; import edu.uci.ics.jung.visualization.VisualizationViewer; import edu.uci.ics.jung.visualization.control.DefaultModalGraphMouse; import edu.uci.ics.jung.visualization.decorators.ToStringLabeller; import edu.uci.ics.jung.visualization.picking.PickedInfo; import edu.uci.ics.jung.visualization.renderers.DefaultVertexLabelRenderer; import edu.uci.ics.jung.visualization.renderers.Renderer.VertexLabel.Position; public class Design { public Graph g; public Design() { this.g = ProjectTools.readNet("SmallTown.net"); } private static class VertexPaintTransformer implements Transformer { private final PickedInfo pi; VertexPaintTransformer ( PickedInfo pi ) { super(); if (pi == null) throw new IllegalArgumentException("PickedInfo instance must be non-null"); this.pi = pi; } @Override public Paint transform(Integer i) { Color p = null; //Edit here to set the colours as reqired by your solution if ( i % 2 == 0) p = Color.GREEN; else p = Color.RED; //Remove if a selected colour is not required if ( pi.isPicked(i)){ p = Color.yellow; } return p; } } public static  void main(String[] args) { Design sgv = new Design(); Layout layout = new FRLayout(sgv.g); layout.setSize(new Dimension(800,800)); VisualizationViewer vv = new VisualizationViewer(layout); Transformer vertexPaint = new Transformer() { @Override public Paint transform(Integer i) { if ( i % 2 == 0) return (Paint) Color.GREEN; else return (Paint) Color.RED; } }; vv.setPreferredSize(new Dimension(850,850)); vv.getRenderContext().setVertexLabelRenderer(new DefaultVertexLabelRenderer(Color.green)); vv.getRenderContext().setEdgeDrawPaintTransformer(new ConstantTransformer(Color.white)); vv.getRenderContext().setEdgeStrokeTransformer(new ConstantTransformer(new BasicStroke(2.5f))); vv.getRenderContext().setVertexFillPaintTransformer(new VertexPaintTransformer(vv.getPickedVertexState())); DefaultModalGraphMouse graphMouse = new DefaultModalGraphMouse(); graphMouse.setMode(edu.uci.ics.jung.visualization.control.ModalGraphMouse.Mode.PICKING); vv.setGraphMouse(graphMouse); vv.setBackground(Color.gray); vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller()); vv.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR); JFrame frame = new JFrame("Projet Algo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(vv); frame.pack(); frame.setVisible(true); } } 

我用一个支持选择的新版本VertexPaintTransformer重新修改了你的Transformer ,删除了第二次使用setVertexFillPaintTransformer并将你从BasicVisualizationServerVisualizationViewer所以我可以使用一个选择GraphMouse

在此处输入图像描述

我不得不模拟你的ProjectTools#readNet()方法,但是我可以看到Odd,Even和Selected颜色。

您现在可以根据需要修改VertexPaintTransformer#transform()