TopLevelContainer

Status
Nicht offen für weitere Antworten.

max5432

Aktives Mitglied
Wenn ich eine GUI baue, habe ich die Möglichkeit, eine Subklasse der Klasse JFrame zu erstellen, oder gar in meiner Klasse einfach eine JFrame-Instanz zu erzeugen und mit dieser arbeiten.

Java:
public class MyFrame extends JFrame {
    // ...
}

oder

Java:
public class MyAppGUI {
    createGui() {
        JFrame myFrame = new JFrame("XYZ");
        // ...
    }
}

Nun, wann wird die erste Variante empfohlen und wann die zweite?

Die erste:
  • Wenn ich z. B. das Eventhandling in der GUI-Klasse (gekapselt) implementieren möchte
  • Wenn ich einen solchen JFrame mit zusätzlichen Fähgkeiten versehen möchte und ihn unter Umständen mehrfach verwenden möchte?
  • Wenn ich auf die in der GUI-Klasse enthaltene Komponenten von Aussen zugreiffen muss (z. B. aus dem Eventhandler, der in einer separaten TopLevel-Klasse implementiert wird) und dazu einen kontrollierten Zugriff brauche
  • ...

Ich sehe keine klare Grenze zwischen den beiden Varianten. Gibt es da bessere Pro und Contras? Oder, ist es fast eine Geschmackssache?
 

Landei

Top Contributor
Ich tendiere zur zweiten Variante. Normalerweise kann man alles, was man braucht, "von aussen" steuern (paintComponent will man ja eher selten bei einem JFrame überschreiben). Wenn du jetzt z.B. eine aufgebohrte Variante von JFrame (etwa JXFrame) verwenden willst, machst du dir die Umstellung unnötig schwer.
 

Marco13

Top Contributor
Tendenziell auch das zweite. Es gibt vielleicht (wenn dann aber nur vergleichsweise wenige) Fälle, wo man von JFrame erben sollte, aber in den meisten Fällen sollte man IMHO seine ""Haupt-GUI-Klasse"" von JPanel erben lassen, und nur in der ""main"" einen Frame erstellen und dort seine Haupt-GUI-Klasse (und ggf. die MenuBar) reinlegen.
Als starkes Argument könnte man sehen: Warum sollte man von JFrame erben? Ich könnte mir da spontan keinen Grund dafür vorstellen...:

# Wenn ich z. B. das Eventhandling in der GUI-Klasse (gekapselt) implementieren möchte
Dazu muss man nicht von JFrame erben. Ein Event-Handler ist ein ding, das Events Handel..let, und kein rechteckiges Dinge auf dem Bildschirm.

# Wenn ich einen solchen JFrame mit zusätzlichen Fähgkeiten versehen möchte und ihn unter Umständen mehrfach verwenden möchte?
Welche Fähigkeiten? Es gibt nur wenige Dinge, die man "nur" (oder nur dann "sauber") machen kann, wenn man von JFrame erbt....

# Wenn ich auf die in der GUI-Klasse enthaltene Komponenten von Aussen zugreiffen muss (z. B. aus dem Eventhandler, der in einer separaten TopLevel-Klasse implementiert wird) und dazu einen kontrollierten Zugriff brauche
Dabei ist egal, ob die GUI-Klasse ein JFrame ist oder etwa ein JPanel...

....
 
Status
Nicht offen für weitere Antworten.

Oben