0
私はツリー構造のグラフを描画するためにJGraphTライブラリを使っていますが、ライブラリは与えられたノードと接続されたエッジに基づいてグラフを描画します。ライブラリ "javadoc"のクラス "DirectedAcyclicGraph.VisitedArrayListImpl"それをかなり理解していないし、私はそれが私が探しているものかどうか分からない。グラフを描くためにツリー構造をトラバースする方法は?
public class JGraphAdapterDemo
extends JApplet{
private static final long serialVersionUID = 3256444702936019250L;
private static final Color DEFAULT_BG_COLOR = Color.decode("#FAFBFF");
private static final Dimension DEFAULT_SIZE = new Dimension(530, 320);
private JGraphModelAdapter<String, DefaultEdge> jgAdapter;
/**
* An alternative starting point for this demo, to also allow running this applet as an
* application.
*
* @param args ignored.
*/
public static void main(String[] args)
{
JGraphAdapterDemo applet = new JGraphAdapterDemo();
applet.init();
JFrame frame = new JFrame();
frame.getContentPane().add(applet);
frame.setTitle("JGraphT Adapter to JGraph Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
{@inheritDoc}
public void init()
{
ListenableGraph<String, DefaultEdge> g =
new ListenableDirectedMultigraph<>(DefaultEdge.class);
// create a visualization using JGraph, via an adapter
jgAdapter = new JGraphModelAdapter<>(g);
JGraph jgraph = new JGraph(jgAdapter);
adjustDisplaySettings(jgraph);
getContentPane().add(jgraph);
resize(DEFAULT_SIZE);
String v1 = "+";
String v2 = "3";
String v3 = "*";
String v4 = "4";
String v5 = "5";
// add some sample data (graph manipulated via JGraphT)
g.addVertex(v1);
g.addVertex(v2);
g.addVertex(v3);
g.addVertex(v4);
g.addVertex(v5);
g.addEdge(v1, v2);
g.addEdge(v1, v3);
g.addEdge(v3, v4);
g.addEdge(v3, v5);
positionVertexAt(v1, 130, 40);
positionVertexAt(v2, 50, 150);
positionVertexAt(v3, 280, 150);
positionVertexAt(v4, 240, 250);
positionVertexAt(v5, 400, 250);
}
private void adjustDisplaySettings(JGraph jg)
{
jg.setPreferredSize(DEFAULT_SIZE);
Color c = DEFAULT_BG_COLOR;
String colorStr = null;
try {
colorStr = getParameter("bgcolor");
} catch (Exception e) {
}
if (colorStr != null) {
c = Color.decode(colorStr);
}
jg.setBackground(c);
}
@SuppressWarnings("unchecked")
private void positionVertexAt(Object vertex, int x, int y)
{
DefaultGraphCell cell = jgAdapter.getVertexCell(vertex);
AttributeMap attr = cell.getAttributes();
Rectangle2D bounds = GraphConstants.getBounds(attr);
Rectangle2D newBounds = new Rectangle2D.Double(x, y, bounds.getWidth(), bounds.getHeight());
GraphConstants.setBounds(attr, newBounds);
AttributeMap cellAttr = new AttributeMap();
cellAttr.put(cell, attr);
jgAdapter.edit(cellAttr, null, null, null);
}
private static class ListenableDirectedMultigraph<V, E>
extends DefaultListenableGraph<V, E>
implements DirectedGraph<V, E>
{
private static final long serialVersionUID = 1L;
ListenableDirectedMultigraph(Class<E> edgeClass)
{
super(new DirectedMultigraph<>(edgeClass));
}
}}
私はこのデモコードをjavadocから使用しています。このツリー構造に接続する方法を探したいと思います。誰もこれに似た何かをしたことがありますか?
これは私があなたに必要なのいずれかのよう
OKのは、私は私の木のライブラリをあきらめていると私は」としましょう私はJGraphTクラスを使ってツリーをどのように構築することができるか考えていますか?説明はうまくいくはずです。 – Dee
頂点=ツリーノードとエッジ=ツリーノード間の接続。最初のコードブロックにグラフやツリーの作成方法のサンプルコードがあります。ツリーは単なるグラフのようなものです。 – Reek