JGraph - Graph erstellen

  • Themenstarter Themenstarter fscomputer
  • Beginndatum Beginndatum
F

fscomputer

Hallo zusammen!

ich möchte aus einer textdatei einen graphen erstellen.
hierzu möchte ich jgraph nutzen.
nun scheiter ich leider schon am erstellen des graphen, da es leider kein vernünftiges tutorial oder howto gibt.
ich habe einen beispielgraphen, den ich nun erstmal abwandeln möchte um jgraph und die arbeitsweise zu verstehen. leider bekomme ich sobald ich einen der zellwerte änder ne fehlermeldung...

Code:
import java.awt.Color;
import java.awt.geom.Rectangle2D;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JScrollPane;

import org.jgraph.JGraph;
import org.jgraph.graph.DefaultEdge;
import org.jgraph.graph.DefaultGraphCell;
import org.jgraph.graph.DefaultGraphModel;
import org.jgraph.graph.DefaultPort;
import org.jgraph.graph.GraphConstants;
import org.jgraph.graph.GraphModel;


public class HelloWorld {

	public static void main(String[] args) {

		// Construct Model and Graph
		GraphModel model = new DefaultGraphModel();
		JGraph graph = new JGraph(model);

		// Control-drag should clone selection
		graph.setCloneable(true);

		// Enable edit without final RETURN keystroke
		graph.setInvokesStopCellEditing(true);

		// When over a cell, jump to its default port (we only 
		// have one, anyway)
		graph.setJumpToDefaultPort(true);
		

		// Insert all three cells in one call, so we need an 
		// array to store them
		DefaultGraphCell[] cells = new DefaultGraphCell[3];

		// Create Hello Vertex
		cells[0] = createVertex("Hello", 20, 20, 40, 20, 
					null, false);

		// Create World Vertex
		cells[1] = createVertex("World", 200, 200, 40, 20, 
					Color.ORANGE, true);

		// Create Edge
		DefaultEdge edge = new DefaultEdge();
		// Fetch the ports from the new vertices, 
		// and connect them with the edge
		edge.setSource(cells[0].getChildAt(0));
		edge.setTarget(cells[1].getChildAt(0));
		cells[2] = edge;

		// Set Arrow Style for edge
		int arrow = GraphConstants.ARROW_CLASSIC;
		GraphConstants.setLineEnd(edge.getAttributes(), arrow);
		GraphConstants.setEndFill(edge.getAttributes(), true);

		// Insert the cells via the cache, so they get selected
		graph.getGraphLayoutCache().insert(cells);

		// Show in Frame
		JFrame frame = new JFrame();
		frame.getContentPane().add(new JScrollPane(graph));
		//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.pack();
		frame.setVisible(true);
	}

	public static DefaultGraphCell createVertex(String name, double x,
		double y, double w, double h, Color bg, boolean raised) {

		// Create vertex with the given name
		DefaultGraphCell cell = new DefaultGraphCell(name);

		// Set bounds
		GraphConstants.setBounds(cell.getAttributes(),
				new Rectangle2D.Double(x, y, w, h));

		// Set fill color
		if (bg != null) {
			GraphConstants.setGradientColor(
				cell.getAttributes(), Color.orange);
			GraphConstants.setOpaque(
				cell.getAttributes(), true);
		}

		// Set raised border
		if (raised)
			GraphConstants.setBorder(
				cell.getAttributes(), 
				BorderFactory.createRaisedBevelBorder());
		else
			// Set black border
			GraphConstants.setBorderColor(
				cell.getAttributes(), Color.black);

		// Add a Port
		DefaultPort port = new DefaultPort();
		cell.add(port);
		port.setParent(cell);

		return cell;
	}

}


wenn ich eine zelle hinzufüge wird diese nicht angezeigt und wenn ich die arrays änder erscheint immer eine index oder out of bounds exception.

ich hoffe ihr könnt mir weiterhelfen!


danke schonmal.
 
Zuletzt bearbeitet von einem Moderator:
...alles klar hat sich erledigt... die Kanten de graphen zählen auch als element des arrays...

aber wenn jemand noch irgendwelche guides oder ähnlihces hat wär ich sehr dankbar!
 
Zurück