Я работаю с библиотекой JGraphT, чтобы нарисовать график для моей древовидной структуры, но библиотека рисует график на основе заданного набора узлов и связанных ребер. Я прочитал класс «DirectedAcyclicGraph.VisitedArrayListImpl» в библиотеке javadoc, но я не совсем понял, и я не уверен, что это то, что я ищу.Как пересечь древовидную структуру, чтобы нарисовать график?
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, и я хочу, чтобы найти способ, чтобы подключить его к этой древовидной структуре. Кто-нибудь сделал что-то подобное этому?
Это моя структура дерева
public class Tree {
Tree left, right;
char op;
int val;
boolean isOp;
Tree(char op, Tree l, Tree r) {
this.isOp = true;
this.left = l;
this.right = r;
this.op = op;
}
Tree (int v){
this.isOp = false;
this.val = v;
}
static void toString(Tree t) {
if (t.isOp){
toString(t.left);
System.out.print(t.op);
toString(t.right);
}
else
System.out.print(t.val);
}
public void preorderIter(Tree root) {
if(root == null)
return;
Stack<Tree> stack = new Stack<Tree>();
stack.push(root);
while(!stack.empty()){
Tree n = stack.pop();
System.out.printf("%s ",n.op);
if(n.right != null){
stack.push(n.right);
System.out.printf("%s",n.right);
}
if(n.left != null){
stack.push(n.left);
System.out.printf("%s",n.left);
}
}
}
Я был бы признателен за любую помощь
ок давайте говорить, что я бросаю свою библиотеку дерева и я m собирается использовать классы библиотеки, любую идею о том, как я могу построить дерево с использованием классов JGraphT? объяснение будет прекрасным. – Dee
vertex = tree node и edge = соединения между узлами дерева. Зная это, у вас уже есть образец кода в вашем первом блоке кода о том, как создать граф или дерево. Дерево - это всего лишь особый вид графика. – Reek