OOP Buttons mit Pfeilen miteinander verbinden

Löwenherz

Mitglied
Hallo liebe Leute,

ich habe neulich ein Projekt am laufen, wobei ich auf einem GUI mehrere Panels erstellen muss, sie dann mit Buttons ausfülle und anschließend die Buttons je nach Abhängigkeit untereinander miteinander mit Pfeilen verbinde.
Soweit habe ich alles geschafft bis auf die Pfeilverbindung. Ich weiß, dass man in Java in der paintComponent-Methode zeichnen kann, aber ich krieg die Zeichnung nicht zusammen mit den Buttons.
Wäre super wenn mir jemand an enem kleinen Beispiel zeigen würde, wie man die Buttons via Pfeile verbindet.

N.B: wegen der Unübersichtlichkeit des Codes habe ich kein Code mitgepostet.

Danke,
 
Du hast Daten die deine Abhängigkeiten definieren, dann musst ja im einfachen Fall nur alle Button durchgehen und schauen ob Button X mit Button Y in Verbindung steht. Wenn ja, dann berechnest dir die Mittelpunkte der Schaltflächen über deren Position und Ausmaß und zeichnest denn entlang dieses Vektors von Mittelpunkt zu Mittelpunkt ne Linie. So der theoretische Ansatz.

Was klappt nun genau nicht?
 
Hallo,

danke erstmal für die schnelle antwort🙂
Der theoritische Ansatz ist schon richtig, nur ich bekomme die paint-Methode nicht aufgerufen!
Könntest du mir anhand eines kleinen Beispiel (mit Panels, Buttons und Linien bzw. Pfeile) zeigen wie es geht?

Danke im voraus!
 
Danke L-ectron,
ahso nochmal: ich bekomme die Buttons in die Panels eingefügt, aber ich weiss nicht wie ich diese Buttons halt miteinander (mit einer Linie) verbinde. Ich habe diese Klasse geschrieben:
Java:
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;

public class Graph extends JPanel {
	JPanel panel = new JPanel();
	JPanel[] vorgGraphSegmente;
	JPanel[] nachfGraphSegmente;
	JPanel startRequirement;
	JTabbedPane tabs = new JTabbedPane();

	int anzahlSegmente;
	List<List<String>> nachfolgerSegmente;
	List<List<String>> vorgaengerSegmente;
	String selectedRequirement;

	public Graph() {

	}

	public JPanel createSegmente(List<List<String>> vorgaengerSegmente,
			List<List<String>> nachfolgerSegmente, String selectedReq) {
		vorgGraphSegmente = new JPanel[vorgaengerSegmente.size()];
		nachfGraphSegmente = new JPanel[nachfolgerSegmente.size()];

		for (int i = vorgaengerSegmente.size() - 1; i >= 0; i--) {


			vorgGraphSegmente[i] = new JPanel();
			vorgGraphSegmente[i].setOpaque(true);
			vorgGraphSegmente[i].setBorder(BorderFactory
					.createLineBorder(Color.RED));
			vorgGraphSegmente[i].setLayout(new GridLayout(7, 1, 20, 30));
			for (int j = 0; j < vorgaengerSegmente.get(i).size(); j++) {

				vorgGraphSegmente[i].add(new JButton(vorgaengerSegmente.get(i)
						.get(j).toString()));
				// panel.add(vorgGraphSegmente[i]);

			}
			panel.add(vorgGraphSegmente[i]);

		}

		startRequirement = new JPanel();

		startRequirement.add(new JButton(selectedReq));
		panel.add(startRequirement);

		for (int j = 0; j < nachfolgerSegmente.size(); j++) {
			nachfGraphSegmente[j] = new JPanel();
			nachfGraphSegmente[j].setOpaque(true);
			nachfGraphSegmente[j].setBorder(BorderFactory
					.createLineBorder(Color.RED));
			nachfGraphSegmente[j].setLayout(new GridLayout(7, 1, 20, 30));
			for (int k = 0; k < nachfolgerSegmente.get(j).size(); k++) {

				nachfGraphSegmente[j].add(new JButton(nachfolgerSegmente.get(j)
						.get(k).toString()));
				// panel.add(nachfGraphSegmente[j]);

			}
			panel.add(nachfGraphSegmente[j]);

		}

		FlowLayout fl = new FlowLayout();
		fl.setHgap(70);
		fl.setVgap(150);
		panel.setLayout(fl);


		StartGui.getSp().setRightComponent(tabs);
		return panel;

	}

	
	public void paintComponent(Graphics g) {   // hier liegt mein problem !!!

		JButton startReq = (JButton) startRequirement.getComponent(0);
		JButton nachfReq = (JButton) nachfGraphSegmente[0].getComponent(0);

		Graphics2D g2d = (Graphics2D) g;
		super.paintComponent(g2d);
		g2d.drawLine(x1,y1,x2,y2);   // hier werden die koordinaten der buttons eingesetzt
	}
}

ich möchte in diese klasse (auf dem Panel, wo alle Komponenten sind) linien zwischen den Buttons zeichnen.

Danke im voraus.
 

Neue Themen


Zurück
Oben