Swing Komponenten organisieren

TheWhiteShadow

Bekanntes Mitglied
Hallo,

Ich schreibe eine größere Swing-Anwendung und habe bei den Komponenten ein immer wiederkerendes Problem.
Eine Komponente muss Grafikelemente einer anderen Komponente manipulieren.

Bisher kennt nur das JFrame die relevanten Komponenten und übergibt die benötigten Komponenten in den Konsturkoren seiner Kind-Elemente.
Das ging anfangs noch ganz gut, aber je mehr Funktionen die Komponenten bekommen, desto mehr Quer-Referenzen benötigen sie.
Die Reihenfolge der Komponenten ist schon stark fixiert und ich vermeide nur mühevoll Zirkelreferenzen.

Kann man das irgendwie allgemeiner lösen?

Ein weiteres Problem ist die Komplexität dieser Querreferenzierung, da das eigentliche Model, was die relevanten Daten enthält kaum Änderungen unterliegt, die Verwaltung des Grafikinterfaces aber bald aus allen Nähten platzt.
Lohnt sich dazu ein eigenes Modelkonzept für das Grafikinterface. Und wenn ja, wie baut man so etwas auf?

mfg TWS
 
T

Tomate_Salat

Gast
Um die Referenzen aufzulösen setzt man ein DI-Framework (z.B. google-Guice) ein. Dieses Framework kümmert sich dann um deine Abhängigkeiten, die du dir nach Bedarf einfach Injecten lassen kannst.
 

TheWhiteShadow

Bekanntes Mitglied
Bei DI wird ein Objekt in ein anderes Objekt als referenz gesetzt, wenn dieses erstellt wird.
Das löst irgendwie die Abhängigkeit der Reihenfolge überhaupt nicht.

Mein letzter Ansatz war eine Auslagerung der Komponenten in eine statisches Speicherklasse.
Auf diese Weise hätte ich immer Zugriff auf alle Komponenten, und muss die Konstruktions-Reihenfolge nicht mehr beachten, aber ich will kein Statisches Objekt haben.

Das 2. Problem versuche ich grade mit intensivem Gebrauch des Observer-Pattern zu lösen.
Bisher kamen nur viele Klassen hinzu, übersichtlicher als vorher ist es noch nicht.
 

bERt0r

Top Contributor
Dann mach dir in deinem JFrame doch eine Map, in der du dir sämtliche Komponenten mit einem eindeutigen Schlüssel speichers. Den Komponenten übergibst du eine Referenz auf die Map, und wenn sie Zugriff auf einen anderen brauchen, suchen sie ihn sich mithilfe des Schlüssels.

z.B Map<String,JComponent> components....
components.add("MainPanel",panel1);
components.add("ImageLabel",imgLabel1);
 

TheWhiteShadow

Bekanntes Mitglied
Ich hab mein statische Objekt in soweit abgeändert, dass es als Schnittstelle für Plugins fungiert. Es ist nicht mehr statisch und erlaubt Listener zu adden. Dadurch benötige ich keinen weiteren externen Zugriff.

Eine Map klingt dennoch gar nicht schlecht, zumal es nicht auf einen festen Satz an Komponentne limitiert und somit auch für plugins praktisch ist. Und da Listener unbekannten Typs schwer zu verwalten sind, kommt es bei Plugins eigentlich ganz gut, dessen GUI-Elemente Global über eine Map verfügbar zu machen.

Edit:
@vanny
aus der Grafik werd ich patu nicht schlau.
 
Zuletzt bearbeitet:
V

vanny

Gast
ok dann vielleicht 2-3 Worte dazu.

1. Klasse: WidgetCreator:
Der WidgetCreator erzeugt und hält alle benötigten Komponenten zBsp. in einer Map.
Dann packst du die benötigten Komponenten in deinen Frame ">>add();>>".
eigntl. benötigst du nur einen Getter, der dir anhand des Keys die passende Komponente zurückgibt.
evt. noch hier und da ´ne setMethode();.

2. Klasse: DivListener:

steht halt sysmbolisch für all deine Listener, die du so benötigst.
Denen übergibst du ne Referenz vom WidgetCreator und besorgst dir dort dann die Referenzen für deine Änderungen, nimmst diese vor und gibst dem WidgetCreator nochmal bescheid, dass der Frame mal neu gezeichnet werden soll.

3. Klasse ist halt dein Frame:

nc :p

//EDIT:
Dadurch hast du keine Statischen Objekte und kannst im Listener flexibel auf die verschiedenen Komponenten zugreifen.

Gruß Vanny
 
Zuletzt bearbeitet von einem Moderator:

TheWhiteShadow

Bekanntes Mitglied
Was genau bezeichnest du in deinem Model als "Änderung"
Die Änderung, dessen Information den Listenern mitgeteilt wird, oder die Reaktion der implementierenden Komponente?

Dein "WidgetCreator"-Model brauch ich nicht in der Form, da ich bei den Listenern immer nur die Komponente brauch, welche das Event ausgelöst hat, und die schickt ich gleich mit.
Ich zeichne auch immer nur die Kompnente neu, die sich geändert hat. Wenn sich mehrere Komponenten ändern, läuft der repaint mit über die Listener.

Einzige Ausnahme bildet das Menü, da es weniger Reaktionen hervorruft, als viel mehr Verhaltensweisen der Komponenten ändert.
Da ich dessen Konfiguration aber bereits in einigen Konstuktoren benötige, hab ich es gleich mitgegeben.
 
V

vanny

Gast
Hehe,
bevor wir aneinander vorbei reden, ich benutze allgemeine Begriffe wie Änderungen, weil ich nicht weiß, was du da wirklich baust.

Ich wollte dir lediglich eine Idee unterbreiten, wie du flexibel auf deine Komponenten zugreifen kannst, ohne statisch zu werden und, wie du es bezeichnet hast Querreferenzierungen zu bekommen.

Was genau bezeichnest du in deinem Model als "Änderung"
Die Änderung, dessen Information den Listenern mitgeteilt wird, oder die Reaktion der implementierenden Komponente?

Eigentlich die Änderung die der Listener auf der/den fremden Komponente(n) auslöst.
Naja scheint so, als wüßtest du mittlerweile besser was du da vorhast also lass dich durch mich einfach nicht verwirren :p

Gruß Vanny
 
Zuletzt bearbeitet von einem Moderator:

TheWhiteShadow

Bekanntes Mitglied
Ok, ich war mir da nicht so sicher.^^

Dein Model behalte ich mal im Hinterkopf. Jenachdem was da noch hinzukommt, könnte es doch noch in irgendeiner Form relevant werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Swing Komponenten nicht sichtbar nach Start AWT, Swing, JavaFX & SWT 12
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
BabySuna Swing Komponenten auslagern auf separate Datei AWT, Swing, JavaFX & SWT 8
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
P AWT Einzelne Komponenten zur Laufzeit austauschen? AWT, Swing, JavaFX & SWT 3
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
F Gebundene Eigenschaften bei Komponenten mit NetBeans verarbeiten AWT, Swing, JavaFX & SWT 3
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
dereki2000 Swing JFrame nah hinzufügen von Komponenten akualisieren. AWT, Swing, JavaFX & SWT 2
L Swing Komponenten erst nach Resize sichtbar AWT, Swing, JavaFX & SWT 2
S Swing Panel übernimmt komponenten von anderem AWT, Swing, JavaFX & SWT 7
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
P Gleichmäßige Anodnung von Komponenten im migLayout AWT, Swing, JavaFX & SWT 2
DaCrazyJavaExpert Swing Komponenten genauer anordnen. AWT, Swing, JavaFX & SWT 13
DaCrazyJavaExpert Swing Komponenten in GridBagLayout werden Falsch angeordnet AWT, Swing, JavaFX & SWT 1
P Größe und Ausrichtung von Komponenten festlegen AWT, Swing, JavaFX & SWT 13
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
Neumi5694 LookAndFeel Look & Feel nicht angezeigter Komponenten ändern AWT, Swing, JavaFX & SWT 6
D JavaFX GUI Komponenten werden langsam bei größerer Datenmenge AWT, Swing, JavaFX & SWT 6
R Komponenten von JPanel bleiben unsichtbar AWT, Swing, JavaFX & SWT 2
D JavaFX Welche Komponenten vermisst ihr? Welche wären essenziell notwendig? AWT, Swing, JavaFX & SWT 8
M Datei mit Komponenten einbinden AWT, Swing, JavaFX & SWT 7
T SWT Externer zugrif auf SWT Komponenten AWT, Swing, JavaFX & SWT 3
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
J MouseOver bei Komponenten AWT, Swing, JavaFX & SWT 9
S Größe der Komponenten, beim ändern der größe des Frames, mit ändern! AWT, Swing, JavaFX & SWT 2
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5
G Komponenten vergrößern sich nicht trotz Layoutmanager AWT, Swing, JavaFX & SWT 24
M JavaFX Scenebuilder eigene Komponenten AWT, Swing, JavaFX & SWT 8
A Swing per JComboBox gewünschtes Attribut auswählen und Komponenten passen sich an AWT, Swing, JavaFX & SWT 7
A JavaFX Eigene Komponenten im Scene Builder AWT, Swing, JavaFX & SWT 0
Q Swing Fenster updaten - Hinzugefügte Komponenten darstellen AWT, Swing, JavaFX & SWT 3
S BoxLayout: Anordnung der Komponenten links statt zentriert AWT, Swing, JavaFX & SWT 0
Bartertown JTable - Verschiedene Komponenten in einer Spalte unterbringen AWT, Swing, JavaFX & SWT 3
U Frame zeigt keine Komponenten AWT, Swing, JavaFX & SWT 7
G Applet Applet Komponenten flackern AWT, Swing, JavaFX & SWT 10
K LayoutManager Probleme mit 2 Komponenten AWT, Swing, JavaFX & SWT 9
M Komponenten übereinander AWT, Swing, JavaFX & SWT 7
R Komponenten werden erst nach maximierung des Frames sichtbar (Linux) AWT, Swing, JavaFX & SWT 5
H Swing Getter für GUI-Komponenten AWT, Swing, JavaFX & SWT 3
B Komponenten in Fenster verdrängen sich untereinander AWT, Swing, JavaFX & SWT 6
N Komponenten übereinander AWT, Swing, JavaFX & SWT 3
S Anordnung von GUI-Komponenten mit LayouManger (Problem beim anzeigen von JTextField) AWT, Swing, JavaFX & SWT 5
M Swing Komponenten enablen? AWT, Swing, JavaFX & SWT 4
X Java Komponenten jeder Zeit hinzufügen können AWT, Swing, JavaFX & SWT 3
S View-Komponenten im Controller bekannt machen AWT, Swing, JavaFX & SWT 7
D Grafische Komponenten komplett neu aufbauen (Neukonstruktion) AWT, Swing, JavaFX & SWT 5
A AWT Komponenten in JavaFX einbetten AWT, Swing, JavaFX & SWT 9
M Swing Komponenten erscheinen beim darüberfahren? AWT, Swing, JavaFX & SWT 7
H Komponenten unmittelbar nach dem Ausführen teilweise unsichtbar AWT, Swing, JavaFX & SWT 3
K GUI in Komponenten aufteilen (MVC) AWT, Swing, JavaFX & SWT 2
W Funktionen, sowie aufruf einiger Komponenten AWT, Swing, JavaFX & SWT 4
J Alle Komponenten eines JFrames durchlaufen AWT, Swing, JavaFX & SWT 2
R Swing Komponenten bleiben bei Animation unsichtbar AWT, Swing, JavaFX & SWT 7
T Unter JPanel liegende Komponenten "totschalten" AWT, Swing, JavaFX & SWT 5
morphesus Swing Komponenten werden nicht angezeigt AWT, Swing, JavaFX & SWT 8
C Swing Reihenfolge der Initialisierung von Komponenten AWT, Swing, JavaFX & SWT 6
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 7
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 2
W Bildgröße automatisch an Komponenten anpassen AWT, Swing, JavaFX & SWT 3
S Überlappung zweier Komponenten AWT, Swing, JavaFX & SWT 12
Z größe der komponenten bestimmen AWT, Swing, JavaFX & SWT 16
C GUI-Komponenten skalieren AWT, Swing, JavaFX & SWT 10
M Seltsames Problem mit Resize eines Fensters und seiner Komponenten AWT, Swing, JavaFX & SWT 2
D Swing Komponenten verstecken AWT, Swing, JavaFX & SWT 4
X Swing Resizing der Komponenten innheralb eines Panels AWT, Swing, JavaFX & SWT 2
T Swing Font für alle Komponenten ändern AWT, Swing, JavaFX & SWT 2
S Problem mit Swing Komponenten AWT, Swing, JavaFX & SWT 11
A Swing Alle Komponenten auf JFrame ermitteln AWT, Swing, JavaFX & SWT 4
E LookAndFeel Eigene Komponenten mit Synth L&F stylen AWT, Swing, JavaFX & SWT 2
S Swing Frame und Klasse extends JPanel - Komponenten zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 18
S JButton und textfield.setText - Komponenten über-/verdecken sich AWT, Swing, JavaFX & SWT 15
M Komponenten übereinander prüfen AWT, Swing, JavaFX & SWT 3
W LayoutManager GridBag richtig nutzen - Komponenten richtig anordnen und automatisch vergrößern AWT, Swing, JavaFX & SWT 5
M Komponenten in anderer Reihenfolge anzeigen AWT, Swing, JavaFX & SWT 4
G swing Komponenten verrutschen ständig... AWT, Swing, JavaFX & SWT 6
D Mit GridBayLayout Komponenten anordnen AWT, Swing, JavaFX & SWT 6
N Window transparent, Komponenten nicht transparent AWT, Swing, JavaFX & SWT 11
R Farbänderung von Komponenten wird nicht wirksam AWT, Swing, JavaFX & SWT 7
P Swing Hierachie oder Reihenfolge von Komponenten AWT, Swing, JavaFX & SWT 5
T Sich überlappende Komponenten AWT, Swing, JavaFX & SWT 2
D Swing Probleme beim Anzeigen der einzelnen Komponenten AWT, Swing, JavaFX & SWT 16
R Swing Komponenten klein angezeigt AWT, Swing, JavaFX & SWT 10
D Swing Swing Komponenten verschieben AWT, Swing, JavaFX & SWT 7
B Komponenten nach Skalierung nicht mehr ansprechbar AWT, Swing, JavaFX & SWT 9
Kr0e AWT Komponenten in JPanel AWT, Swing, JavaFX & SWT 6
JuliaOne Komponenten innerhalb eine JScrollpane werden auch ausserhalb davon gezeichnet! AWT, Swing, JavaFX & SWT 7
xehpuk Swing Komponenten werden durch setFont() winzig AWT, Swing, JavaFX & SWT 3
O Größe von Komponenten im JFrame manuell verändern AWT, Swing, JavaFX & SWT 2
H Komponenten anwendugsweit formatieren AWT, Swing, JavaFX & SWT 6
M Swing Komponenten mit fester Größe an Fensterrand(JFrame) AWT, Swing, JavaFX & SWT 2
A Komponenten zur Laufzeit entfernen AWT, Swing, JavaFX & SWT 3
Weiti Swing Animationen - Drehung aller Komponenten auf Knopfdruck AWT, Swing, JavaFX & SWT 12
P LayoutManager Komponenten einfügen (FlowLayout, BoxLayout) AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben