# Knoten, Kanten erzeugen



## bd3m (21. Sep 2013)

Hey,

Das ganze Projekt geht über Graphen (Knoten,Kanten, Tiefensuche) usw.. Ich habe auch schon Klassen erstellt, die einen Graphen repräsentieren usw.

Eine Frage zur GUI:
Die GUI passt von der Oberfläche her. Nur bei "Graph laden", lese ich einen Graphen im XML-Format ein, und speichere daraus Knoten, Kanten. 

Und nun will ich in meiner Oberfläche die Knoten hinzufügen und die Kanten, sowie die Verbindungen dazwischen, hinzufügen, indem ich aus dem Graphen, die Knoten und Kanten auslese..

Also erstmal:

Wie kann ich auf meinem JEditorPane(), oder ähnlichem.  X Knoten erzeugen ? :autsch:

Hier der Java - Code 

```
public class DiGraphView extends JFrame {
	private JTextField txtSuchalgorithmus;
	private JTextField txtStart;
	private JTextField txtZiel;
	private JComboBox comboBox;
	private JComboBox comboBox_1;
	private JComboBox comboBox_2;
	private JSlider slider;
	private JEditorPane editorPane;
	private JButton btnGraphLaden;
	private JButton btnNewButton;
	DiGraph graphen;

	public DiGraphView() {

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("DiGraph-GUI-View");
		getContentPane().setLayout(null);
		setBounds(300, 300, 1050, 600);

		btnGraphLaden = new JButton("Graph laden");
		btnGraphLaden.setBounds(35, 269, 174, 25);
		getContentPane().add(btnGraphLaden);
		btnGraphLaden.addActionListener(new FileOpenListener());

		btnNewButton = new JButton("suchen");
		btnNewButton.setBounds(35, 320, 174, 25);
		getContentPane().add(btnNewButton);

		txtSuchalgorithmus = new JTextField();
		txtSuchalgorithmus.setText("Suchalgorithmus");
		txtSuchalgorithmus.setBounds(44, 71, 114, 19);
		getContentPane().add(txtSuchalgorithmus);
		txtSuchalgorithmus.setColumns(10);

		txtStart = new JTextField();
		txtStart.setText("Start");
		txtStart.setBounds(44, 136, 114, 19);
		getContentPane().add(txtStart);
		txtStart.setColumns(10);

		txtZiel = new JTextField();
		txtZiel.setText("Ziel");
		txtZiel.setBounds(44, 193, 114, 25);
		getContentPane().add(txtZiel);
		txtZiel.setColumns(10);

		comboBox = new JComboBox();
		comboBox.setModel(new DefaultComboBoxModel(new String[] { "A-Stern",
				"Breitensuche", "Tiefensuche", "Dijsktra" }));
		comboBox.setBounds(202, 68, 86, 24);
		getContentPane().add(comboBox);

		comboBox_1 = new JComboBox();
		comboBox_1.setBounds(188, 133, 86, 24);
		getContentPane().add(comboBox_1);

		comboBox_2 = new JComboBox();
		comboBox_2.setBounds(202, 193, 86, 24);
		getContentPane().add(comboBox_2);

		slider = new JSlider();
		slider.setBounds(35, 241, 200, 16);
		getContentPane().add(slider);

		editorPane = new JEditorPane();
		editorPane.setBounds(390, 133, 570, 414);
		getContentPane().add(editorPane);
	}

	class FileOpenListener extends JPanel implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent arg0) {
			// JFileChooser-Objekt erstellen
			JFileChooser chooser = new JFileChooser();
			// Dialog zum Speichern von Dateien anzeigen
			chooser.showDialog(null, "Datei öffnen");
			File graph = chooser.getSelectedFile();
			InputStream inStream = null;
			try {
				inStream = new java.io.FileInputStream(graph);
			} catch (FileNotFoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			XYGXLSupport support = new XYGXLSupport();
			try {
				graphen = support.read(inStream);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}
}
```

Ich hoffe mein Anliegen ist klar ???:L

Vielen Dank für die Hilfe :toll:


----------



## njans (21. Sep 2013)

JEditorPane() ist ein Test-Feld mit ein paar netten Eigenschaften. 
Deine Frage wundert mich, denn deine anfängliche Beschreibung klingt eher danach, dass du den Graphen zeichnen willst. 

Es wäre sinnvoll wenn du klarstellen würdest, wie die Darstellung erfolgen soll.


----------



## bd3m (21. Sep 2013)

Ja ich will den Graphen u.a. zeichnen. 

Also die GUI sollte zum Schluss, einen Graphen einlesen können, diesen dann zeichnen können und auf diesen Graphen verschiedene Suchalgorithmen durchlaufen lassen können.

Graphen zeichen, war ja erstmal der 1. Schritt. Die Knoten als Kreise/Rechtecke mir egal, und die Kanten halt als Pfeile, da in den Kanten auch die Vorgänger und Nachgängerknoten gespiechert sind. 

Wenn das dann mal klappt, muss ich irgendwie die Suchalorithmen (die ich fertig habe) damit verbinden, dass man einen Startknoten und Endknoten auswählen kann und anschließend den Suchalgo. 

Aber bevor ich mich da ran wage, muss ich erstmal den Graphen zeichnen können oder.. Es muss auch kein JEditorPane() sein. Ich will einfach auf meiner besthenden GUI den Graphen hinzufügen.


----------



## njans (21. Sep 2013)

Als ersten Schritt musst du den nicht zeichnen, sondern ein Model erstellen, dass den Graphen repräsentiert. Sprich eine Klasse bauen, die einen Graph mit all seinen Kanten darstellen kann, so dass du deine Suchalgorithmen darauf laufen lassen kannst. 

Wenn du das hast kannst du einfach eine Klasse von JPanel erben lassen, dann dem Konstruktor ein solches Graphen Model übergeben und dann in der paintComponent Methode des JPanels den Graphen zeichnen.


----------



## bd3m (23. Sep 2013)

Hallo,

ich habe bereits eine Klasse, die meine Graphen repräsentieren kann. 
Diese Klasse gibt mir die Knoten aus, auch die x und y Koordinaten von dem jeweiligen Knoten.
Sowie die Kanten, die mit dem Knoten verbunden sind..


Frage anders:
1)Wie erstelle ich ein Koordinatensystem
2) Wie lasse ich Swing automatisch meine Punkte (Knoten)malen, ich habe die x und y Koordinate.
3) wie kann ich die Kanten zwischen den Knoten einfügen. Die INformation, welcher Knoten mir welchem verbunden ist habe ich auch .

Bitte helft mir, ich steh seit Tagen auf dem Schlauch


----------

