JUNG2如何画直线?
How to draw Straight line by JUNG2?
用JUNG2测试后,我发现所有的边线都是弯曲的,但不是直线...如何用JUNG2把边线做成直线?
package pkg;
import javax.swing.JFrame;
import edu.uci.ics.jung.algorithms.layout.CircleLayout;
import edu.uci.ics.jung.algorithms.layout.Layout;
import edu.uci.ics.jung.visualization.VisualizationViewer;
import edu.uci.ics.jung.visualization.control.DefaultModalGraphMouse;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.graph.SparseMultigraph;
import edu.uci.ics.jung.visualization.control.ModalGraphMouse;
public class test {
public static void main(String[] args) {
// Graph<V, E> where V is the type of the vertices
// and E is the type of the edges
Graph<Integer, String> g = new SparseMultigraph<Integer, String>();
// Add some vertices. From above we defined these to be type Integer.
g.addVertex((Integer)1);
g.addVertex((Integer)2);
g.addVertex((Integer)3);
// Add some edges. From above we defined these to be of type String
// Note that the default is for undirected edges.
g.addEdge("Edge-A", 1, 2);
g.addEdge("Edge-B", 2, 3);
// Let's see what we have. Note the nice output from the
// SparseMultigraph<V,E> toString() method
// Note that we can use the same nodes and edges in two different graphs.
System.out.println("The graph g = " + g.toString());
Layout<Integer, String> layout = new CircleLayout(g);
VisualizationViewer<Integer,String> vv = new VisualizationViewer<Integer,String>(layout);
DefaultModalGraphMouse gm = new DefaultModalGraphMouse();
gm.setMode(ModalGraphMouse.Mode.PICKING);
vv.setGraphMouse(gm);
JFrame frame = new JFrame("Simple Graph View");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(vv);
frame.pack();
frame.setVisible(true);
}
}
按照输出结果,黑线是默认的,红线是我想要得到的:
http://www.zhaocs.info/wp-content/uploads/2015/04/test.png
tl;dr:
通话
vv.getRenderContext().setEdgeShapeTransformer(
new EdgeShape.Line<Integer,String>());
在你的 VisualizationViewer
JUNG 中的边形有多种选择。这些选项实现为 "edge shape transformers",嵌套 edu.uci.ics.jung.visualization.decorators.EdgeShape
class 的 classes。默认值为 EdgeShape.QuadCurve
,这会导致弯曲的边缘。其他选项包括(从文档中提取):
BentLine<V,E> bent-line between the vertex endpoints.
Box<V,E> loop with its nadir at the center of the vertex.
CubicCurve<V,E> CubicCurve between vertex endpoints.
Line<V,E> straight line between the vertex endpoints.
Loop<V,E> loop with its nadir at the center of the vertex.
Orthogonal<V,E> bent-line between the vertex endpoints.
QuadCurve<V,E> QuadCurve between vertex endpoints.
SimpleLoop<V,E> loop with its nadir at the center of the vertex.
Wedge<V,E> isosceles triangle whose apex is at the destination
vertex for directed edges, and as a "bowtie" shape
for undirected edges.
用JUNG2测试后,我发现所有的边线都是弯曲的,但不是直线...如何用JUNG2把边线做成直线?
package pkg;
import javax.swing.JFrame;
import edu.uci.ics.jung.algorithms.layout.CircleLayout;
import edu.uci.ics.jung.algorithms.layout.Layout;
import edu.uci.ics.jung.visualization.VisualizationViewer;
import edu.uci.ics.jung.visualization.control.DefaultModalGraphMouse;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.graph.SparseMultigraph;
import edu.uci.ics.jung.visualization.control.ModalGraphMouse;
public class test {
public static void main(String[] args) {
// Graph<V, E> where V is the type of the vertices
// and E is the type of the edges
Graph<Integer, String> g = new SparseMultigraph<Integer, String>();
// Add some vertices. From above we defined these to be type Integer.
g.addVertex((Integer)1);
g.addVertex((Integer)2);
g.addVertex((Integer)3);
// Add some edges. From above we defined these to be of type String
// Note that the default is for undirected edges.
g.addEdge("Edge-A", 1, 2);
g.addEdge("Edge-B", 2, 3);
// Let's see what we have. Note the nice output from the
// SparseMultigraph<V,E> toString() method
// Note that we can use the same nodes and edges in two different graphs.
System.out.println("The graph g = " + g.toString());
Layout<Integer, String> layout = new CircleLayout(g);
VisualizationViewer<Integer,String> vv = new VisualizationViewer<Integer,String>(layout);
DefaultModalGraphMouse gm = new DefaultModalGraphMouse();
gm.setMode(ModalGraphMouse.Mode.PICKING);
vv.setGraphMouse(gm);
JFrame frame = new JFrame("Simple Graph View");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(vv);
frame.pack();
frame.setVisible(true);
}
}
按照输出结果,黑线是默认的,红线是我想要得到的: http://www.zhaocs.info/wp-content/uploads/2015/04/test.png
tl;dr:
通话
vv.getRenderContext().setEdgeShapeTransformer(
new EdgeShape.Line<Integer,String>());
在你的 VisualizationViewer
JUNG 中的边形有多种选择。这些选项实现为 "edge shape transformers",嵌套 edu.uci.ics.jung.visualization.decorators.EdgeShape
class 的 classes。默认值为 EdgeShape.QuadCurve
,这会导致弯曲的边缘。其他选项包括(从文档中提取):
BentLine<V,E> bent-line between the vertex endpoints. Box<V,E> loop with its nadir at the center of the vertex. CubicCurve<V,E> CubicCurve between vertex endpoints. Line<V,E> straight line between the vertex endpoints. Loop<V,E> loop with its nadir at the center of the vertex. Orthogonal<V,E> bent-line between the vertex endpoints. QuadCurve<V,E> QuadCurve between vertex endpoints. SimpleLoop<V,E> loop with its nadir at the center of the vertex. Wedge<V,E> isosceles triangle whose apex is at the destination vertex for directed edges, and as a "bowtie" shape for undirected edges.