2012-11-03 11 views
29

Ich lerne Java GUI. Die Art und Weise, wie ich gelernt habe, ein Fenster zu erstellen, besteht darin, die Klasse JFrame zu erben oder zu erweitern, und es ist gut, sie zu verwenden, da JFrame alle Eigenschaften eines Fensters enthält. Jetzt, wenn ich etwas zu diesem Fenster hinzufügen möchte, muss ich add() Methode verwenden. Aber heute bin ich auf JPanel gestoßen, die auch ein Fenster erstellt und wir können Sachen durch jpanelObjec.add() hinzufügen.JPanel vs JFrame in Java

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

+0

Ähnliche Fragen: http://stackoverflow.com/questions/3497889/difference-between-jpanel-jframe-jcomponent-and-japplet –

Antwort

56

Sie sollten die JFrame Klasse nicht unnötig verlängern (nur, wenn Sie zusätzliche Funktionalität in die JFrame Klasse hinzufügen)

JFrame:

JFrame erweitert Component und Container.

Dies ist ein Container auf oberster Ebene, der die Mindestanforderungen für ein Fenster darstellt. Dazu gehören Border s, resizability (ist die JFrame resizeable?), Die Titelleiste, Kontrollen und Event-Handler für verschiedene Event s wie windowClose, windowOpened usw.

JPanel (Minimize/erlaubt maximieren?):

JPanel erstreckt Component, Container und JComponent

Es ist eine generische Klasse Gruppe verwendet, um andere Component zusammen s.

  • Es ist nützlich bei der Arbeit mit LayoutManager s z.B. GridLayout f.i Hinzufügen von Komponenten zu verschiedenen JPanel s, die dann zur JFrame hinzugefügt werden, um die GUI zu erstellen. Es wird besser in Bezug auf Layout und Wiederverwendbarkeit handhabbar sein.

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

Ein Swing-GUI kann nicht ohne einen Top-Level-Container vorhanden ist wie (JWindow, Window, JFrameFrame oder Applet), während es ohne JPanel s existieren kann.

+3

eigentlich, [JFrame] (http://docs.oracle.com/javase/ 7/docs/api/javax/swing/JFrame.html) erweitert 'JComponent' und' JContainer' nicht. – tenorsax

0

Ich denke, wir können nur eine Klasse erweitern, wenn wir spezifischere Klasse der Oberklasse machen wollen.Sie können eine Instanz von Rahmen wie JFrame frame= new Frame(); machen und Sie können so Objekte wie frame.getContentPane.add(widget) hinzufügen, können nun einen Blick auf Unterschied zwischen Rahmen nehmen und JPanel

JFrame -seine ein Fenster mit einigen gemeinsamen Dinge verwendet, um die Sachen ein darzustellen Fenster sollte haben. Dazu gehören Rahmen (änderbar y/n?), Titelleiste (App-Name oder andere Nachricht), Steuerelemente (Minimieren/Maximieren erlaubt?) Und Event-Handler für verschiedene Systemereignisse wie "Fenster schließen" (App noch beenden?). JFrame ist ein Fenster, das häufig für eigenständige Anwendungen verwendet wird, z. B. ein Warnfenster oder ein Benachrichtigungsfenster, das normalerweise auf dem Bildschirm angezeigt wird. Es verwendet eine Methode des Windows-Listeners, die immer dann ausgeführt wird, wenn Sie ein Fenster schließen, öffnen, maximieren, minimieren oder aktivieren.

JPanel - JPanel dient eigentlich als Mehrzweckbehälter. Dort werden normalerweise komplexere oder größere Operationen durchgeführt. Sie können viele Operationen in ein Panel einfügen. JPanel ist eine Unterklasse von JComponent und JComponent ist eine Unterklasse von Container. Daher ist JPanel auch ein Container. Es gibt so viele Methoden, die für JPanel verwendet werden können, die es von seinen Superklassen geerbt hat. Die Zugänglichkeit, Ausrichtungen und Bildbeobachter sind nur einige Beispiele. In JPanel können Sie auch Felder, Beschriftungen, Schaltflächen, Kontrollkästchen und sogar Bilder und viele andere Funktionen einfügen. Es stellt einfach einen Bereich dar, in dem Sie Visuals und Controls platzieren können.