webentwicklung-frage-antwort-db.com.de

JPanel vs JFrame in Java

Ich lerne Java gui. Die Art und Weise, wie ich gelernt habe, ein Fenster zu erstellen, ist, die Klasse JFrame zu erben oder zu erweitern, und es ist gut, sie als JFrame zu verwenden. Enthält alle Eigenschaften eines Fensters. Wenn ich diesem Fenster etwas hinzufügen möchte, muss ich die Methode add() verwenden. Aber heute bin ich auf JPanel gestoßen, die auch ein Fenster erstellt und wir kann Sachen durch jpanelObjec.add() hinzufügen.

Was ist der Unterschied zwischen den beiden Methoden? Sind sie irgendwie verwandt?

37
Naruto

Sie sollten die Klasse JFrame nicht unnötig erweitern (nur wenn Sie der Klasse JFrame zusätzliche Funktionen hinzufügen).

JFrame:

JFrame erweitert Component und Container.

Es ist ein Container der obersten Ebene, der die Mindestanforderungen für ein Fenster darstellt. Dies beinhaltet Border s, Skalierbarkeit (kann die Größe der JFrame geändert werden?), Titelleiste, Steuerelemente (minimieren/maximieren erlaubt?) Und Ereignisbehandlungsroutinen für verschiedene Event s wie windowClose, windowOpened usw.

JPanel:

JPanel erweitert Component, Container und JComponent

Es ist eine generische Klasse, die verwendet wird, um andere Component zusammenzufassen.

  • Dies ist nützlich, wenn Sie mit LayoutManager arbeiten, z. GridLayout f.i fügt Komponenten zu verschiedenen JPanel hinzu, die dann zu JFrame hinzugefügt werden, um die GUI zu erstellen. Es wird in Bezug auf Layout und Wiederverwendbarkeit leichter zu handhaben sein.

  • Dies ist auch nützlich, wenn Sie in Swing malen/zeichnen, paintComponent(..) überschreiben und natürlich die volle Freude an der doppelten Pufferung haben.

Eine Swing-GUI kann ohne einen Container der obersten Ebene wie (JWindow, Window, JFrameFrame oder Applet) nicht existieren existieren ohne JPanel s.

68
David Kroukamp

JFrame ist das Fenster; Es kann eine oder mehrere JPanel Instanzen enthalten. JPanel ist nicht das Fenster.

Sie benötigen ein Swing-Tutorial:

http://docs.Oracle.com/javase/tutorial/uiswing/

42
duffymo