Aktionen zwischen zwei Klassen: Bester Weg?

Status
Nicht offen für weitere Antworten.

UnkiDunki

Bekanntes Mitglied
Hi,

Ich habe zwei von JPanel* (panelA & panelB) abgeleitete Klassen, die ich in einer dritten Klasse (panelC) instanziiere und "verbaue".
Bei gewissen Aktionen in panelA sollen Reaktionen in panelB auftreten und andersherum.
Meine Frage ist, wie ich das am besten realisiere:

A) Benutze ich das panelC wirklich nur als "Container" für die beiden anderen panels, die ich ihre "Geschäfte" direkt zwischen sich abwickeln lasse (panelA <-> panelB) oder

B) benutze ich panelC als richtige Schnittstelle (panelA <-> panelC <-> panelB)?

Ist das ne Auslegungssache, wie ich das am besten umsetze oder gibt es prinzipiell tatsächlich nur eine einzig vernünftige Umsetzung?

Vielen Dank im Voraus :)

*Habe das extra nicht ins Swing-Forum geschrieben, weil das ja eigentlich einen "Allgemeinfall" darstellt.
 

Marco13

Top Contributor
Ich würd sagen, dass das tendenziell egal ist, oder bestenfalls vom speziellen Zusammenhang abhängt. Wenn man die beiden Panels "schön" trennen und über eine Art "Controller"-Schnittstelle kommunizieren lassen kann, kann man das machen, aber wenn es nur eine krampfig-aufwändige Trennung um der Trennung willen ist, macht das IMHO keinen Sinn...
 

UnkiDunki

Bekanntes Mitglied
Erstmal danke für deine Antwort :)

Nun... im Prinzip ist es eine Trennung der Trennung willen der Übersichtlichkeit willen ;) Notwendig wäre es also nicht, aber aufgrund eines gewissen Umfangs doch ratsam, wie ich finde...
 

Marco13

Top Contributor
Wenn es die Übersichtlikchkeit und ggf. auch Modularität fördert, ja, natürlich. Aber (überpitzt formuliert) zwei hoch-spezielle Interfaces einzuführen "PanelAControllingInterface" und "PanelBControllingInterface", die nur vom Panel C implementiert werden, und an die jeweils anderen Panels weitergereicht werden, wäre IMHO keinem von beidem zuträglich..
 

UnkiDunki

Bekanntes Mitglied
Nein, da wäre der Aufwand im Vergleich zum Nutzen wirklich unangemessen größer...
Mal ein einfaches Beispiel:

panelA besitzt ein JTree mit Kategorien, panelB die dazugehörige JTable. Wird im Baum eine Kategorie ausgewählt, so sollen alle Datensätze dieser Kategorie in der Tabelle angezeigt werden. A ruft dafür z.B. eine öffentliche Methode von B auf und übergibt in dieser die ID der Kategorie. Das wäre jetzt A->B.
Beim Wahl eines Datensatzes soll im panelB alle Kategorien in einer JTable angezeigt werden, in der der Datensatz vorhanden ist. Hier könnte B eine Methode von A aufrufen mit Übergabe der ID des Datensatzes. Das wäre B->A.
Dafür müsste ich ja B A übergeben und A B, oder?
Als Alternative wäre es natürlich möglich Methoden in C aufzurufen in welcher beide Panels instanziiert wurden. Es muss dann ja nur C bei Instanziierung von A und B übergeben werden, anstatt so eine Kreuzgeschichte.

Oder wie würde das jetzt an diesem einfach Beispiel jetzt am elegantesten gehen?
 

Marco13

Top Contributor
Hmja, kommt IMHO eben ein bißchen drauf an, wie stark die "semantische" Verbindung zwischen den beiden ist, und welche Rolle Panel C dabei hat (außer "ein Container zu sein"). Grundsätzlich hast du ja schon zwei Controller: Einen TreeSelectionListener und einen ... TableSelectionListener (oder wie der heißt). Im Prinzip könnten diese Listener außerhalb der jeweiligen Klasse liegen - grob im Sinne von
Code:
class PanelC
{
    void init()
    {
        panelA.addListenerToTree(treeListener);
        panelB.addListenerToTable(tableListener);
    }

    class TreeListener ...
    {
        void selectedSomething(Event event)
        {
            panelB.selectStuffFor(panelA.getSelectedThing());
        }
    }

    class TableListener ...
    {
        void selectedSomething(Event event)
        {
            panelA.selectStuffFor(panelB.getSelectedThing());
        }
    }

}
Hoffentlich ist das jetzt nicht ZU Pseudocodig :rolleyes: ... jedenfalls wäre PanelC damit eher sowas wie ein "Controller", und PanelA und PanelB würden sich dann nicht mehr direkt kennen - was vielleicht den Vorteil hätte, dass man sie getrennt voneinander benutzen kann.... Ist aber auch nur eine spontane Idee .... ob sowas Sinn macht, musst du wissen ;)
 

UnkiDunki

Bekanntes Mitglied
...
Hoffentlich ist das jetzt nicht ZU Pseudocodig :rolleyes: ...

Ne, Quatsch. Du bringst es ja genau auf den Punkt. Danke dir dafür! :) Wäre auch ne gute Umsetzungsidee. Allerdings soll z.B. beim Aufruf des TreeListeners in A nicht nur in B, sondern (natürlich) auch selber in A etwas passieren. In deinem Beispiel wäre dieses ja auch umzusetzen, indem man dann im entsprechenden Listener Methoden von A aufrufen könnte oder man fügt dem A noch einen zweiten Listener hinzu, der sich nur für die internen Geschichten von A kümmert. Mhmm...
Zwar kennen sich so A und B nicht, aber getrennt voneinander nutzen möchte ich sie glaube ich sowieso nicht, daher bin ich immer noch nicht wirklich überzeugt, was jetzt genau am besten wäre. Auf jeden Fall schon mal ne gute Umsetzungsmöglichkeit von dir. Danke noch mal :)

Nachtrag: Die gleiche Geschichte wie du hier als Code präsentiert hast, kann ich ja auch so lösen, dass ich beiden C übergebe und bei Events Methoden in C aufgerufen werden, die wiederum Methoden aus A oder B aufrufen. Ähnliches Gebilde, aber halt der Vorteil, dass die Listener in den jeweiligen Klassen bleiben und auch dort direkt wirken können, oder?
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Hmmmmja.naja... es wäre ja AUCH wieder eine (potentiell unschöne) Verbindung, wenn beide Klassen dann PanelC "persönlich" kennen würden. Die Lösung, die ich beschrieben hatte, hat eben den Vorteil, dass man den Panels nur irgendeinen TreeListener/TableListener übergibt. Das können eigene (evlt. anonyme) Klassen sein, wie im Beispiel. Es könnte aber auch in beiden Fällen direkt PanelC sein (wenn das die entsprechenden Interfaces implementiert), oder ... prinzipiell könnte man auch sowas machen wie
Code:
PanelA implements TableListener { ... }
PanelB implements TreeListener { ... }

// In PanelC:
panelA.addTreeListener(panelB);
panelB.addTableListener(panelA);
Dann würden sich die beiden Panels zwar kennen, aber nicht "pesönlich", d.h. auch wieder nur als "irgendein Listener".

Es gibt da viele Methoden, die abhängig davon sind, wie die genaue Beziehung der Klassen untereinander ist (oder sein soll). Aber i.a. hat man schon eine wichtige... Trennung und Abstraktion, wenn eine "Übergeordnete" Instanz (in diesem Fall PanelC) dafür verantwortlich ist, den untergeordneten (d.h. PanelA und B) möglichst "unspezifische" Listener zuzuordnen. Die genaue Struktur muss man sich dann aber von Fall zu Fall überlegen.
 

UnkiDunki

Bekanntes Mitglied
Ok, Marco13, ich werde mich mal beiden Umsetzungsvorschlägen widmen und gucken, was mir besser gefällt. Bin natürlich offen für weitere Anregungen, aber bis hierhin bin ich schon mal recht zufrieden :) Danke dir!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
DaCrazyJavaExpert Verschiede Aktionen der Datenbank getrennt durchführen Java Basics - Anfänger-Themen 4
S Aktionen verzögern Java Basics - Anfänger-Themen 9
M Windows Aktionen abfangen Java Basics - Anfänger-Themen 3
S Aktionen Zahlen zuweisen Java Basics - Anfänger-Themen 3
F Buttons und Aktionen Java Basics - Anfänger-Themen 20
0 TicTacToe, Problem mit den Checkbox-Aktionen Java Basics - Anfänger-Themen 6
M Erneutes Ausführen bestimmter Aktionen (GoTo-Alternative) Java Basics - Anfänger-Themen 6
G Gleiche Aktionen verarbeiten (aber nur einmal Code)? Java Basics - Anfänger-Themen 2
G ActionListener - Aktionen vor/beim Schließen? Java Basics - Anfänger-Themen 9
G Aktionen auslösen, nach Klick auf "Blätter" eines Java Basics - Anfänger-Themen 2
V Aktionen für mehrere CheckBoxes Java Basics - Anfänger-Themen 4
G Maus+Tastatur aktionen simulieren? Java Basics - Anfänger-Themen 5
A Kleines GIT-Verständnisproblem zwischen zwei Rechnern Java Basics - Anfänger-Themen 6
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
S Unterschied zwischen Denkweisen Java Basics - Anfänger-Themen 13
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
Ras Unterschied zwischen parser xml and api xml Java Basics - Anfänger-Themen 7
X Was ist der Unterschied zwischen materialisierten und nichtmaterialisierten Attributen einer Klasse? Java Basics - Anfänger-Themen 1
F Abstand zwischen zwei Objekten berechnen wie? Java Basics - Anfänger-Themen 1
S Längster Pfad zwischen zwei Vertices in einem Graph Java Basics - Anfänger-Themen 3
U Erste Schritte nextGaussian zwischen zwei Werten Java Basics - Anfänger-Themen 19
jhCDtGVjcZGcfzug Was ist der Unterschied zwischen diesen Quellcodes? Java Basics - Anfänger-Themen 3
rafi072001 Assoziation zwischen Musiker und Label Java Basics - Anfänger-Themen 1
I Best Practice Saubere Verbindung zwischen API und Business Layer mit DTO's Java Basics - Anfänger-Themen 2
A Parametar übergabe zwischen Methoden Java Basics - Anfänger-Themen 26
W User zwischen Optionen wählen lassen Java Basics - Anfänger-Themen 1
I Differenz zwischen LocalDateTime Java Basics - Anfänger-Themen 4
Leo_1789 Differenz ausrechnen zwischen denn idealgewicht und denn echten Gewicht Java Basics - Anfänger-Themen 7
E Wie gebe ich alle Daten zwischen zwei Zeitpunkten aus? Java Basics - Anfänger-Themen 2
P Methode die ausgibt wie viele Primzahlen es zwischen 2 und n gibt Java Basics - Anfänger-Themen 10
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
marcooooo Separator zwischen allen Zeichen eines Strings einfügen Java Basics - Anfänger-Themen 29
NeoLexx Zuweisungskompatibilität zwischen Vererbungsbeziehungen (Polymorphie) Java Basics - Anfänger-Themen 18
L Threads Synchronisierung zwischen threads Java Basics - Anfänger-Themen 4
N Berührung zwischen Rechtecken Java Basics - Anfänger-Themen 5
Y Unterschied zwischen WindowBuilder und herkömmlichen erstellen des GUI´s? Java Basics - Anfänger-Themen 9
J Wert zwischen JFrames übergeben Java Basics - Anfänger-Themen 2
U Worin besteht der Unterschied zwischen call by reference und call by value? Java Basics - Anfänger-Themen 14
E Unterschied zwischen new und import Java Basics - Anfänger-Themen 5
J Punkt auf,über,unter oder zwischen 2 Geraden Java Basics - Anfänger-Themen 14
A Kommunikation zwischen nebenläufigen Threads Java Basics - Anfänger-Themen 4
B Unterschied zwischen (List<T> a) und (T[] a) Java Basics - Anfänger-Themen 7
Dilara_K Abstand zwischen den Doppelwerten in einem Array herausfinden Java Basics - Anfänger-Themen 20
S Nach dem Herüberschieben eines Arrays zwischen 2 Frames öffnet sich das Frame nicht mehr Java Basics - Anfänger-Themen 12
D Zufallszahl zwischen 10 und 99? Java Basics - Anfänger-Themen 5
J Objektzugriff zwischen disjunkten Klassen Java Basics - Anfänger-Themen 1
L Den Winkel zwischen zwei Vektoren berechnen! Java Basics - Anfänger-Themen 2
A Methoden Unterscheid zwischen public und ohne Java Basics - Anfänger-Themen 9
X Input/Output Höchste Temperaturschwankung zwischen 2 Tagen Java Basics - Anfänger-Themen 2
Bluedaishi der Monat zwischen zwei Datumsangaben Java Basics - Anfänger-Themen 15
R Threads Pause zwischen zwei Schleifen Java Basics - Anfänger-Themen 1
Aprendiendo Unterschied zwischen Referenzvariable und Instanzvariable. Java Basics - Anfänger-Themen 2
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12
S Parameterübergabe zwischen zwei Programme Java Basics - Anfänger-Themen 4
S Erste Schritte Zwischen zwei Punkten ein Minimumpkt./Maxima finden Java Basics - Anfänger-Themen 1
K Klassen Array zwischen Klassen übergeben Java Basics - Anfänger-Themen 2
Arif OOP Die Bindung zwischen einem äußeren und einem inneren Objekt Java Basics - Anfänger-Themen 2
schoenosrockos Unterschied zwischen Objekten und vererbungen Java Basics - Anfänger-Themen 1
S OOP Variablen zwischen mehreren Klassen Java Basics - Anfänger-Themen 11
H Klassen Konstruktor Parameter als Instanzvariablen zwischen speichern... Java Basics - Anfänger-Themen 11
F Klassen Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 4
J Variablen Unterschied zwischen lokalen-, Instanz-, Klassenvariablen Java Basics - Anfänger-Themen 6
N Dauer zwischen zwei LocalDateTime Objekten berechnen? Java Basics - Anfänger-Themen 4
P Ungerade Zahlen ausgeben lassen zwischen Spannweite zweier eingegeben zahlen Java Basics - Anfänger-Themen 6
V Zufallswert zwischen zwei Zahlen a und b Java Basics - Anfänger-Themen 12
H Datentypen Tage zwischen zwei Datums berechnen Java Basics - Anfänger-Themen 4
M Variable zwischen Klassen übergeben Java Basics - Anfänger-Themen 5
A attach source: Zusammenhang zwischen JAR und .class/.java Dateien? Java Basics - Anfänger-Themen 2
L Unterschied zwischen Klassen - und Instanzvarbiablen Java Basics - Anfänger-Themen 1
F Vererbung von Attributen zwischen zwei Klassen Java Basics - Anfänger-Themen 6
F Referenzen zwischen Methoden Java Basics - Anfänger-Themen 5
B Distanz zwischen zwei Punkten Java Basics - Anfänger-Themen 4
D Suche nach der Anzahl von Zonen zwischen zwei Punkten Java Basics - Anfänger-Themen 2
G Zugriff zwischen Klassen Java Basics - Anfänger-Themen 15
S Funktion die mir fuer einen String eine Zahl zwischen 0.0 und 1.0 zurueckliefert..? Java Basics - Anfänger-Themen 9
S Unterschiede zwischen equals und contains Java Basics - Anfänger-Themen 2
S Leerzeichen zwischen zwei Zeichen im String entfernen Java Basics - Anfänger-Themen 19
N Werte zwischen Klassen austauschen Java Basics - Anfänger-Themen 1
M Unterschied zwischen Classpath eines Eclipse Projektes und dem CLASSPATH? Java Basics - Anfänger-Themen 3
Thallius Best Practice Events zwischen eigenen Klassen Java Basics - Anfänger-Themen 2
A if-Anweisung zwischen zwei Punkten Java Basics - Anfänger-Themen 1
S Erste Schritte TAB-Wechsel zwischen TextFields Java Basics - Anfänger-Themen 1
B Relativer Pfad zwischen zwei Files Java Basics - Anfänger-Themen 2
M Drag & Drop - Interaktion zwischen Java und dem OS Java Basics - Anfänger-Themen 1
S Erste Schritte Tage zwischen 2 Daten berechnen Java Basics - Anfänger-Themen 6
Z Differenz zwischen 2 Daten berechnen, ohne importiere Funktionen! Java Basics - Anfänger-Themen 10
A Datum zwischen zwei Daten berechnen und in Tagen anzeigen Java Basics - Anfänger-Themen 4
D Unterschied zwischen double und Double Java Basics - Anfänger-Themen 4
Q Unterschied zwischen static und keinem Modifier Java Basics - Anfänger-Themen 15
K Unterschied zwischen Jar, war und ear Dateien Java Basics - Anfänger-Themen 3
S Problem bei Kollision zwischen Array-objekten! Java Basics - Anfänger-Themen 2
M Länge der Strecke zwischen zwei Punkten Java Basics - Anfänger-Themen 10
T Unterschied zwischen Integrationstest und JUnit test? Java Basics - Anfänger-Themen 12
T zwischen den Strings soll ein plus(+) stehen Java Basics - Anfänger-Themen 5
S Methoden Tage zwischen 2 Daten Java Basics - Anfänger-Themen 19
M Typcasting zwischen ganzen Zahlen Java Basics - Anfänger-Themen 7
K Unterschied zwischen break und continue in einer Schleife Java Basics - Anfänger-Themen 14
A Exakte Unterschied zwischen Java EE und Java SE? Java Basics - Anfänger-Themen 4
J Unterschied zwischen statische und nicht statische Methoden? Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben