web-dev-qa-db-fra.com

JPanel vs JFrame dans Java

J'apprends Java gui. La façon dont j'ai appris à créer une fenêtre consiste à hériter ou à étendre la classe JFrame et il est bon de l'utiliser, comme JFrame contient toutes les propriétés d'une fenêtre. Maintenant, si je veux ajouter quelque chose à cette fenêtre, je dois utiliser la méthode add(). Mais aujourd'hui, je suis tombé sur JPanel qui crée également une fenêtre et nous peut ajouter des choses par jpanelObjec.add().

Quelle est la différence entre les deux méthodes? Sont-ils en quelque sorte liés?

37
Naruto

Vous ne devez pas étendre inutilement la classe JFrame (uniquement si vous ajoutez des fonctionnalités supplémentaires à la classe JFrame.)

JFrame:

JFrame étend Component et Container.

C'est un conteneur de niveau supérieur utilisé pour représenter les exigences minimales pour une fenêtre. Ceci inclut Borders, la redimensionnement (le JFrame est-il redimensionnable?), La barre de titre, les contrôles (minimiser/maximiser?) Et les gestionnaires d’événements pour divers Events comme windowClose, windowOpened etc.

JPanel:

JPanel étend Component, Container et JComponent

C'est une classe générique utilisée pour regrouper d'autres Components.

  • C'est utile lorsque vous travaillez avec LayoutManagers GridLayout f.i en ajoutant des composants à différents JPanels qui seront ensuite ajoutés au JFrame pour créer le gui. Ce sera plus gérable en termes de Layout et de réutilisation.

  • Il est également utile pour peindre/dessiner dans Swing, de remplacer paintComponent(..) et d’avoir toutes les joies du double tampon.

Une interface graphique Swing ne peut pas exister sans un conteneur de niveau supérieur tel que (JWindow, Window, JFrameFrame ou Applet), existe sans JPanels.

68
David Kroukamp

JFrame est la fenêtre; il peut contenir une ou plusieurs instances JPanel. JPanel est pas la fenêtre.

Vous avez besoin d'un tutoriel Swing:

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

42
duffymo