Kommunikation zwischen 2 Klassen

Carcharoth

Bekanntes Mitglied
Hallo

Ich habe eine Klasse "Bauteil" welche Maschinenteile beschreibt (Länge, Breite, Gewicht, Preis, usw.).
In einer GUI stelle ich die Maschinenteile mittels einer Klasse "Draw" grafisch dar.

Wenn eine Änderung an den geometrischen Attribute von einem Bauteil erfolgt, möchte ich die grafische Darstellung auf der GUI anpassen können.
Entsprechende Methode habe ich in "Draw" implementiert.

Wie kann ich die beiden Klassen am besten verbinden?
Wie sagt das Bauteil der grafischen Abbildung aus Draw, dass sie das Maschinenteil neu zeichnen muss?

Ich hatte gedacht, dass ich in der Klasse Bauteil, nebst den Attributen Länge, Breite, Gewicht, usw. noch ein Attribut des Types Draw hinzufüge. So hätte jedes Bauteil gleich seine grafische Darstellung mit an Bord. Aber dann schaffe ich es nicht, dass das die Instanz von Draw innerhalb von Bauteil auf die geometrische Attribute von Bauteil zugreifen kann.

Danke für eure Tipps.
Gruss
 
So ganz habe ich die Problematik nicht verstanden.

Wenn Du in einer Instanz von Draw ein Bauteil brauchst, dann kannst Du dies natürlich auch dort hinterlegen, also in draw eine Referenz zu Bauteil speichern.

Aber die generelle Problematik hört sich mehr nach einen Thematik an, die über eine Art von Event gelöst werden kann, damit möglicht wenig Abhängigkeiten bestehen.

Wie man das genau abbildet, kann man sich dann überlegen. So könnte z.B. ein changeListener eingeführt werden. Dann hätte Bauteil ein addChangeListener. Und immer wenn sich das Bauteil verändert, dann wird bei allen ChangeListener eine Methode aufgerufen (die halt in ChangeListener - einem funktionalen Interface - definiert wurde.), die dann z.B. als Parameter das Element hat, das geändert wurde.

Dann kannst Du in der UI das entsprechend nutzen, indem da halt z.B. eine Methode redrawElement(element) existiert, die dann da hinterlegt werden kann für jedes Bauteil a.la. sampleElement.addChangeListener(this::redrawElement);

Das ist aber auch nur eine Idee. Da geht halt einiges mehr. Beispiele, wie das woanders gelöst wurde wären z.B. die Events von AWT oder das Binding der Property von JavaFX. So eine der beiden Technologien benutzt wird, dann könnte auch die entsprechende Logik 1:1 verwendet werden statt da halt selbst etwas zu bauen.
 
Danke.
Der Ansatz mit dem changeListener muss ich mir noch etwas genauer ansehen.

Wie kann ich denn in einer Klasse "Draw" eine Referenz auf eine Instanz einer anderen Klasse "Bauteil" speichern?
Wenn ich Draw wie folgt mit einem Konstruktor ausstatte, zeigt dann das Attribut bauteil von Draw auf das gleiche Objekt wie die aufrufende Klasse oder macht der Konstruktor von Draw eine Kopie davon?

Java:
public class Draw {
    Bauteil bauteil;
    
    Draw(Bauteil bauteil) {
        this.bauteil=bauteil;
    }
}
 

Zurück
Oben