SwingUtilities.getWindowAncestor(Component c)?

Status
Nicht offen für weitere Antworten.

Verjigorm

Top Contributor
Hallo,

ich habe heute grade in einem anderen Thread die Funktion
SwingUtilities.getWindowAncestor(Component c) gesehen, die ich bisher noch nicht kannte.
Nun wollte ich mal fragen was von der Funktion in einer Single-Window-Applikation zu halten ist?

Bisher gabs eigentlich 3 Möglichkeiten an das JFrame zu kommen:
Normal habe ich in meinen Programmen meist die Referenz zu dem JFrame immer überall hin durchgereicht, falls es benötigt wurde.
Die andere Möglichkeit war ein Singleton
oder eine public static final Variable des JFrames

Irgendwie weiss ich aber grad nicht, was ich von dieser neuen "Möglichkeit" halten soll.

mfg Verjigorm
 

Ebenius

Top Contributor
Verjigorm hat gesagt.:
Irgendwie weiss ich aber grad nicht, was ich von dieser neuen "Möglichkeit" halten soll.

Ich auch nicht. :) Ich benutze SwingUtilities.getAncestor(...) bzw. SwingUtilities.getWindowAncestor(...) recht häufig.

Ein Beispiel: Nimm an, ich brauche einen TableCellEditor, der ein TextFeld und einen Button mit Text "..." hat, zum Beispiel zur Eingabe eines Dateipfades. Wenn jemand in der Tabellenzelle auf "..." klickt, muss ich einen Dialog aufmachen, damit der Nutzer sein File raussuchen kann. Dem Dialog gibt man den Eigentümer mit.

Um den CellEditor wiederverwenden zu können, baue ich ihn generisch; so dass er die Applikation in der er läuft überhaupt nicht kennt. In einem solchen Falle habe ich gar keine andere Wahl, als mir das ancestor window über die Hierarchie zu holen.

Hope that helps, Ebenius
 

Verjigorm

Top Contributor
Funktioniert das denn immer?
Was gibts da denn für Probleme?

Habs jetzt nur einige Male getestet, würde mir natürlich damit oft viel Objekt-Durchreicherei ersparen.
 

Ebenius

Top Contributor
Verjigorm hat gesagt.:
Funktioniert das denn immer?

Was soll da denn nicht funktionieren? Macht einfach so lange
Code:
Component.getParent()
bis entweder ein Window rauskommt oder null. Entsprechend funktionierts immer. Wenn die Komponente irgendwo in einem Fenster hängt findet's das Fenster. Sonst natürlich nicht. :-D

Grüße, Ebenius
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben