SWING - Guide rapide

Swing API est un ensemble de composants GUI extensibles pour faciliter la vie du développeur pour créer des applications frontales / GUI basées sur JAVA. Il est construit sur l'API AWT et agit comme un remplacement de l'API AWT, car il a presque tous les contrôles correspondant aux contrôles AWT. Le composant Swing suit une architecture Model-View-Controller pour répondre aux critères suivants.

  • Une seule API doit être suffisante pour prendre en charge plusieurs aspects.

  • L'API doit être basée sur un modèle afin que l'API de plus haut niveau ne soit pas obligée de contenir des données.

  • L'API consiste à utiliser le modèle Java Bean afin que Builder Tools et IDE puissent fournir de meilleurs services aux développeurs.

Architecture MVC

L'architecture de l'API Swing suit l'architecture MVC de la manière suivante.

  • Le modèle représente les données du composant.

  • La vue représente une représentation visuelle des données du composant.

  • Le contrôleur prend l'entrée de l'utilisateur sur la vue et reflète les changements dans les données du composant.

  • Le composant Swing a le modèle comme élément séparé, tandis que les parties Vue et Contrôleur sont matricées dans les éléments de l'interface utilisateur. Pour cette raison, Swing a une architecture d'apparence et de convivialité enfichable.

Caractéristiques Swing

  • Light Weight - Les composants Swing sont indépendants de l'API native du système d'exploitation car les contrôles de l'API Swing sont principalement rendus à l'aide de code JAVA pur au lieu d'appels de système d'exploitation sous-jacents.

  • Rich Controls - Swing fournit un riche ensemble de contrôles avancés tels que les contrôles Tree, TabbedPane, slider, colorpicker et table.

  • Highly Customizable - Les commandes Swing peuvent être personnalisées de manière très simple car l'apparence visuelle est indépendante de la représentation interne.

  • Pluggable look-and-feel - L'apparence et la convivialité de l'application GUI basée sur SWING peuvent être modifiées au moment de l'exécution, en fonction des valeurs disponibles.

Cette section vous explique comment télécharger et configurer Java sur votre machine. Veuillez suivre les étapes suivantes pour configurer l'environnement.

Java SE est disponible gratuitement à partir du lien Télécharger Java . Par conséquent, vous pouvez télécharger une version basée sur votre système d'exploitation.

Suivez les instructions pour télécharger Java et exécuter le .exepour installer Java sur votre machine. Une fois que vous avez installé Java sur votre machine, vous devez définir les variables d'environnement pour qu'elles pointent vers les répertoires d'installation appropriés.

Configuration du chemin pour Windows 2000 / XP

En supposant que vous ayez installé Java dans c:\Program Files\java\jdk annuaire -

Step 1 - Cliquez avec le bouton droit sur «Poste de travail» et sélectionnez «Propriétés».

Step 2 - Cliquez sur le bouton «Variables d'environnement» sous l'onglet «Avancé».

Step 3- Modifiez la variable «Path» afin qu'elle contienne également le chemin d'accès à l'exécutable Java. Exemple, si le chemin est actuellement défini sur'C:\WINDOWS\SYSTEM32', puis changez votre chemin pour lire 'C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin'.

Configuration du chemin pour Windows 95/98 / ME

En supposant que vous ayez installé Java dans c:\Program Files\java\jdk annuaire -

Step 1 - Modifier le 'C:\autoexec.bat' fichier et ajoutez la ligne suivante à la fin: 'SET PATH=%PATH%;C:\Program Files\java\jdk\bin'.

Configuration du chemin pour Linux, UNIX, Solaris, FreeBSD

La variable d'environnement PATH doit être définie pour pointer vers l'endroit où les binaires Java ont été installés. Reportez-vous à votre documentation Shell si vous rencontrez des problèmes pour cela.

Exemple, si vous utilisez bash comme shell, vous ajouteriez la ligne suivante à la fin '.bashrc: export PATH=/path/to/java:$PATH'.

Éditeurs Java populaires

Pour écrire vos programmes Java, vous aurez besoin d'un éditeur de texte. Il existe des IDE encore plus sophistiqués disponibles sur le marché. Mais pour l'instant, vous pouvez envisager l'un des éléments suivants -

  • Notepad - Sur une machine Windows, vous pouvez utiliser n'importe quel éditeur de texte simple comme Notepad (recommandé pour ce didacticiel), TextPad.

  • Netbeans - Netbeans est un IDE Java open source et gratuit, qui peut être téléchargé depuis https://www.netbeans.org/index.html.

  • Eclipse - Eclipse est également un IDE Java développé par la communauté open source Eclipse et peut être téléchargé depuis https://www.eclipse.org/.

Chaque interface utilisateur prend en compte les trois aspects principaux suivants -

  • UI Elements- Ce sont les éléments visuels de base que l'utilisateur voit finalement et avec lesquels il interagit. GWT fournit une énorme liste d'éléments largement utilisés et communs variant de basiques à complexes, que nous aborderons dans ce tutoriel.

  • Layouts- Ils définissent comment les éléments de l'interface utilisateur doivent être organisés à l'écran et fournissent un aspect final à l'interface utilisateur graphique (GUI). Cette partie sera traitée dans le chapitre Mise en page.

  • Behavior- Ce sont les événements qui se produisent lorsque l'utilisateur interagit avec des éléments de l'interface utilisateur. Cette partie sera traitée dans le chapitre Gestion des événements.

Chaque contrôle SWING hérite des propriétés de la classe de composants hiearchy suivante.

S.No. Classe et description
1 Composant

Un composant est la classe de base abstraite pour les commandes d'interface utilisateur sans menu de SWING. Le composant représente un objet avec une représentation graphique

2 Récipient

Un conteneur est un composant qui peut contenir d'autres composants SWING

3 JComponent

Un JComponent est une classe de base pour tous les composants de l'interface utilisateur SWING. Pour utiliser un composant SWING qui hérite de JComponent, le composant doit être dans une hiérarchie de confinement dont la racine est un conteneur SWING de niveau supérieur

Éléments de l'interface utilisateur SWING

Voici la liste des contrôles couramment utilisés lors de la conception de l'interface graphique à l'aide de SWING.

S.No. Classe et description
1 JLabel

Un objet JLabel est un composant permettant de placer du texte dans un conteneur.

2 JButton

Cette classe crée un bouton étiqueté.

3 JColorChooser

Un JColorChooser fournit un volet de contrôles conçu pour permettre à un utilisateur de manipuler et de sélectionner une couleur.

4 Boîte JCheck

Un JCheckBox est un composant graphique qui peut être dans un on (vrai ou off (faux) état.

5 JRadioButton

La classe JRadioButton est un composant graphique qui peut être dans un on (vrai ou off(faux) état. dans un groupe.

6 JList

Un composant JList présente à l'utilisateur une liste déroulante d'éléments de texte.

sept JComboBox

Un composant JComboBox présente à l'utilisateur un menu de choix pour afficher.

8 JTextField

Un objet JTextField est un composant de texte qui permet de modifier une seule ligne de texte.

9 JPasswordField

Un objet JPasswordField est un composant de texte spécialisé pour la saisie de mot de passe.

dix JTextArea

Un objet JTextArea est un composant de texte qui permet de modifier plusieurs lignes de texte.

11 ImageIcon

Un contrôle ImageIcon est une implémentation de l'interface Icon qui peint des icônes à partir d'images

12 JScrollbar

Un contrôle Scrollbar représente un composant de barre de défilement afin de permettre à l'utilisateur de sélectionner parmi une plage de valeurs.

13 JOptionPane

JOptionPane fournit un ensemble de boîtes de dialogue standard qui invitent les utilisateurs à saisir une valeur ou les informent de quelque chose.

14 JFileChooser

Un contrôle JFileChooser représente une fenêtre de dialogue dans laquelle l'utilisateur peut sélectionner un fichier.

15 JProgressBar

Au fur et à mesure que la tâche progresse vers l'achèvement, la barre de progression affiche le pourcentage d'achèvement de la tâche.

16 JSlider

Un JSlider permet à l'utilisateur de sélectionner graphiquement une valeur en faisant glisser un bouton dans un intervalle limité.

17 JSpinner

Un JSpinner est un champ de saisie sur une seule ligne qui permet à l'utilisateur de sélectionner un nombre ou une valeur d'objet dans une séquence ordonnée.

Dans ce chapitre, vous en apprendrez davantage sur les événements, leurs types et également comment gérer un événement. Un exemple est fourni à la fin du chapitre pour une meilleure compréhension.

Qu'est-ce qu'un événement?

Le changement d'état d'un objet est appelé Event, c'est-à-dire que l'événement décrit le changement d'état de la source. Les événements sont générés à la suite de l'interaction de l'utilisateur avec les composants de l'interface utilisateur graphique. Par exemple, cliquer sur un bouton, déplacer la souris, saisir un caractère au clavier, sélectionner un élément dans la liste et faire défiler la page sont les activités qui provoquent la survenue d'un événement.

Types d'événements

Les événements peuvent être globalement classés en deux catégories -

  • Foreground Events- Ces événements nécessitent une interaction directe de l'utilisateur. Ils sont générés comme les conséquences d'une personne interagissant avec les composants graphiques de l'interface utilisateur graphique. Par exemple, cliquer sur un bouton, déplacer la souris, saisir un caractère via le clavier, sélectionner un élément dans la liste, faire défiler la page, etc.

  • Background Events- Ces événements nécessitent l'interaction de l'utilisateur final. Les interruptions du système d'exploitation, les pannes matérielles ou logicielles, l'expiration du minuteur et l'achèvement de l'opération sont quelques exemples d'événements en arrière-plan.

Qu'est-ce que la gestion des événements?

La gestion des événements est le mécanisme qui contrôle l'événement et décide de ce qui doit se passer si un événement se produit. Ce mécanisme a un code appelé gestionnaire d'événements, qui est exécuté lorsqu'un événement se produit.

Java utilise le modèle d'événement de délégation pour gérer les événements. Ce modèle définit le mécanisme standard pour générer et gérer les événements.

Le modèle d'événement de délégation comprend les principaux participants suivants.

  • Source- La source est un objet sur lequel l'événement se produit. La source est responsable de fournir des informations sur l'événement survenu à son gestionnaire. Java nous fournit des classes pour l'objet source.

  • Listener- Il est également connu sous le nom de gestionnaire d'événements. L'auditeur est responsable de la génération d'une réponse à un événement. Du point de vue de l'implémentation Java, l'auditeur est également un objet. L'auditeur attend de recevoir un événement. Une fois l'événement reçu, l'auditeur traite l'événement puis revient.

L'avantage de cette approche est que la logique de l'interface utilisateur est complètement séparée de la logique qui génère l'événement. L'élément d'interface utilisateur est capable de déléguer le traitement d'un événement à un morceau de code distinct.

Dans ce modèle, l'écouteur doit être enregistré auprès de l'objet source afin que l'écouteur puisse recevoir la notification d'événement. C'est un moyen efficace de gérer l'événement, car les notifications d'événements sont envoyées uniquement aux écouteurs qui souhaitent les recevoir.

Étapes impliquées dans la gestion des événements

Step 1 - L'utilisateur clique sur le bouton et l'événement est généré.

Step 2 - L'objet de la classe d'événements concernée est créé automatiquement et les informations sur la source et l'événement sont renseignées dans le même objet.

Step 3 - L'objet événement est transmis à la méthode de la classe d'écouteur enregistrée.

Step 4 - La méthode est exécutée et retourne.

Points à retenir à propos de l'auditeur

  • Afin de concevoir une classe d'écouteur, vous devez développer des interfaces d'écouteur. Ces interfaces d'écouteur prévoient certaines méthodes de rappel abstraites publiques, qui doivent être implémentées par la classe d'écouteur.

  • Si vous n'implémentez aucune des interfaces prédéfinies, votre classe ne peut pas agir en tant que classe d'écoute pour un objet source.

Méthodes de rappel

Ce sont les méthodes fournies par le fournisseur d'API et définies par le programmeur d'application et appelées par le développeur d'application. Ici, les méthodes de rappel représentent une méthode d'événement. En réponse à un événement, java jre lancera la méthode de rappel. Toutes ces méthodes de rappel sont fournies dans les interfaces d'écoute.

Si un composant souhaite qu'un auditeur écoute ses événements, la source doit s'enregistrer auprès de l'auditeur.

Exemple de gestion d'événements

Créez le programme Java suivant en utilisant n'importe quel éditeur de votre choix dans say D:/ > SWING > com > tutorialspoint > gui >

SwingControlDemo.java

package com.tutorialspoint.gui;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SwingControlDemo {
   private JFrame mainFrame;
   private JLabel headerLabel;
   private JLabel statusLabel;
   private JPanel controlPanel;

   public SwingControlDemo(){
      prepareGUI();
   }
   public static void main(String[] args){
      SwingControlDemo swingControlDemo = new SwingControlDemo();  
      swingControlDemo.showEventDemo();       
   }
   private void prepareGUI(){
      mainFrame = new JFrame("Java SWING Examples");
      mainFrame.setSize(400,400);
      mainFrame.setLayout(new GridLayout(3, 1));

      headerLabel = new JLabel("",JLabel.CENTER );
      statusLabel = new JLabel("",JLabel.CENTER);        
      statusLabel.setSize(350,100);
      
      mainFrame.addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent windowEvent){
            System.exit(0);
         }        
      });    
      controlPanel = new JPanel();
      controlPanel.setLayout(new FlowLayout());

      mainFrame.add(headerLabel);
      mainFrame.add(controlPanel);
      mainFrame.add(statusLabel);
      mainFrame.setVisible(true);  
   }
   private void showEventDemo(){
      headerLabel.setText("Control in action: Button"); 

      JButton okButton = new JButton("OK");
      JButton submitButton = new JButton("Submit");
      JButton cancelButton = new JButton("Cancel");

      okButton.setActionCommand("OK");
      submitButton.setActionCommand("Submit");
      cancelButton.setActionCommand("Cancel");

      okButton.addActionListener(new ButtonClickListener()); 
      submitButton.addActionListener(new ButtonClickListener()); 
      cancelButton.addActionListener(new ButtonClickListener()); 

      controlPanel.add(okButton);
      controlPanel.add(submitButton);
      controlPanel.add(cancelButton);       

      mainFrame.setVisible(true);  
   }
   private class ButtonClickListener implements ActionListener{
      public void actionPerformed(ActionEvent e) {
         String command = e.getActionCommand();  
         
         if( command.equals( "OK" ))  {
            statusLabel.setText("Ok Button clicked.");
         } else if( command.equals( "Submit" ) )  {
            statusLabel.setText("Submit Button clicked."); 
         } else {
            statusLabel.setText("Cancel Button clicked.");
         }  	
      }		
   }
}

Compilez le programme à l'aide de l'invite de commande. Aller àD:/ > SWING et tapez la commande suivante.

D:\AWT>javac com\tutorialspoint\gui\SwingControlDemo.java

Si aucune erreur ne se produit, cela signifie que la compilation est réussie. Exécutez le programme à l'aide de la commande suivante.

D:\AWT>java com.tutorialspoint.gui.SwingControlDemo

Vérifiez la sortie suivante.

Les classes d'événements représentent l'événement. Java fournit diverses classes d'événements, cependant, seules celles qui sont plus fréquemment utilisées seront abordées.

Classe EventObject

C'est la classe racine à partir de laquelle tous les objets d'état d'événement doivent être dérivés. Tous les événements sont construits avec une référence à l'objet, lesource, qui est logiquement considéré comme l'objet sur lequel l'Evénement en question s'est initialement produit. Cette classe est définie dansjava.util paquet.

Déclaration de classe

Voici la déclaration pour java.util.EventObject classe -

public class EventObject
   extends Object
      implements Serializable

Champ

Voici les champs pour java.util.EventObject classe -

protected Object source - L'objet sur lequel l'événement s'est produit initialement.

Constructeurs de classe

Sr.No. Constructeur et description
1

EventObject(Object source)

Construit un événement prototypique.

Méthodes de classe

Sr.No. Méthode et description
1

Object getSource()

Objet sur lequel l'événement s'est produit initialement.

2

String toString()

Renvoie une représentation String de cet EventObject.

Méthodes héritées

Cette classe hérite des méthodes de la classe suivante -

  • java.lang.Object

Classes d'événement SWING

Voici la liste des classes d'événements couramment utilisées.

Sr.No. Classe et description
1 AWTEvent

C'est la classe d'événements racine pour tous les événements SWING. Cette classe et ses sous-classes remplacent l'originaljava.awt.Event classe.

2 ActionEvent

L'événement ActionEvent est généré lorsque le bouton est cliqué ou que l'élément d'une liste est double-cliqué.

3 InputEvent

La classe InputEvent est la classe d'événements racine pour tous les événements d'entrée au niveau des composants.

4 L'évenement important

Lors de la saisie du caractère, l'événement Key est généré.

5 MouseEvent

Cet événement indique qu'une action de la souris s'est produite dans un composant.

6 WindowEvent

L'objet de cette classe représente le changement d'état d'une fenêtre.

sept AdjustmentEvent

L'objet de cette classe représente l'événement d'ajustement émis par les objets réglables.

8 ComponentEvent

L'objet de cette classe représente le changement d'état d'une fenêtre.

9 ContainerEvent

L'objet de cette classe représente le changement d'état d'une fenêtre.

dix MouseMotionEvent

L'objet de cette classe représente le changement d'état d'une fenêtre.

11 PaintEvent

L'objet de cette classe représente le changement d'état d'une fenêtre.

Les écouteurs d'événements représentent les interfaces chargées de gérer les événements. Java fournit diverses classes d'écouteurs d'événements, cependant, seules celles qui sont plus fréquemment utilisées seront abordées. Chaque méthode d'une méthode d'écoute d'événement a un seul argument en tant qu'objet qui est la sous-classe de la classe EventObject. Par exemple, les méthodes d'écouteur d'événements de souris accepteront l'instance de MouseEvent, où MouseEvent dérive d'EventObject.

Interface EventListner

C'est une interface de marqueur que chaque interface d'écoute doit étendre. Cette classe est définie dansjava.util paquet.

Déclaration de classe

Voici la déclaration pour java.util.EventListener interface -

public interface EventListener

Interfaces d'écoute d'événement SWING

Voici la liste des écouteurs d'événements couramment utilisés.

Sr.No. Classe et description
1 ActionListener

Cette interface est utilisée pour recevoir les événements d'action.

2 ComponentListener

Cette interface est utilisée pour recevoir les événements du composant.

3 ItemListener

Cette interface est utilisée pour recevoir les événements d'élément.

4 KeyListener

Cette interface est utilisée pour recevoir les événements clés.

5 MouseListener

Cette interface est utilisée pour recevoir les événements de la souris.

6 WindowListener

Cette interface est utilisée pour recevoir les événements de la fenêtre.

sept AdjustmentListener

Cette interface est utilisée pour recevoir les événements d'ajustement.

8 ContainerListener

Cette interface est utilisée pour recevoir les événements du conteneur.

9 MouseMotionListener

Cette interface est utilisée pour recevoir les événements de mouvement de la souris.

dix FocusListener

Cette interface est utilisée pour recevoir les événements de focus.

Les adaptateurs sont des classes abstraites pour recevoir divers événements. Les méthodes de ces classes sont vides. Ces classes existent pour faciliter la création d'objets d'écoute.

Adaptateurs SWING

Voici la liste des adaptateurs couramment utilisés lors de l'écoute d'événements GUI dans SWING.

Sr.No. Adaptateur et description
1 FocusAdapter

Une classe d'adaptateur abstraite pour recevoir des événements de focus.

2 KeyAdapter

Une classe d'adaptateur abstraite pour recevoir des événements clés.

3 MouseAdapter

Une classe d'adaptateur abstraite pour recevoir des événements de souris.

4 MouseMotionAdapter

Une classe d'adaptateur abstraite pour recevoir des événements de mouvement de souris.

5 WindowAdapter

Une classe d'adaptateur abstraite pour recevoir des événements de fenêtre.

La disposition fait référence à la disposition des composants dans le conteneur. D'une autre manière, on pourrait dire que l'agencement consiste à placer les composants à une position particulière à l'intérieur du conteneur. La tâche de mise en page des contrôles est effectuée automatiquement par le gestionnaire de mise en page.

Gestionnaire de mise en page

Le gestionnaire de disposition positionne automatiquement tous les composants dans le conteneur. Même si vous n'utilisez pas le gestionnaire de disposition, les composants sont toujours positionnés par le gestionnaire de disposition par défaut. Il est possible de disposer les commandes à la main, cependant, cela devient très difficile pour les deux raisons suivantes.

  • Il est très fastidieux de gérer un grand nombre de contrôles dans le conteneur.

  • Habituellement, les informations de largeur et de hauteur d'un composant ne sont pas fournies lorsque nous devons les organiser.

Java fournit divers gestionnaires de disposition pour positionner les contrôles. Les propriétés telles que la taille, la forme et la disposition varient d'un gestionnaire de mise en page à l'autre. Lorsque la taille de l'applet ou de la fenêtre d'application change, la taille, la forme et la disposition des composants changent également en réponse, c'est-à-dire que les gestionnaires de disposition s'adaptent aux dimensions de l'appletviewer ou de la fenêtre d'application.

Le gestionnaire de disposition est associé à chaque objet Container. Chaque gestionnaire de disposition est un objet de la classe qui implémente l'interface LayoutManager.

Voici les interfaces définissant les fonctionnalités des Layout Managers.

Sr.No. Interface et description
1 LayoutManager

L'interface LayoutManager déclare les méthodes qui doivent être implémentées par la classe, dont l'objet agira comme un gestionnaire de disposition.

2 LayoutManager2

Le LayoutManager2 est la sous-interface du LayoutManager. Cette interface est destinée aux classes qui savent comment mettre en page des conteneurs en fonction d'un objet de contrainte de disposition.

Classes AWT Layout Manager

Voici la liste des contrôles couramment utilisés lors de la conception de l'interface graphique à l'aide d'AWT.

Sr.No. LayoutManager et description
1 Bordure

La disposition des bordures organise les composants pour s'adapter aux cinq régions: est, ouest, nord, sud et centre.

2 CardLayout

L'objet CardLayout traite chaque composant du conteneur comme une carte. Une seule carte est visible à la fois.

3 FlowLayout

Le FlowLayout est la disposition par défaut. Il dispose les composants dans un flux directionnel.

4 Disposition de la grille

Le GridLayout gère les composants sous la forme d'une grille rectangulaire.

5 GridBagLayout

Il s'agit de la classe de gestionnaire de mise en page la plus flexible. L'objet de GridBagLayout aligne le composant verticalement, horizontalement ou le long de sa ligne de base sans nécessiter les composants de même taille.

6 GroupLayout

Le GroupLayout regroupe hiérarchiquement les composants afin de les positionner dans un conteneur.

sept SpringLayout

Un SpringLayout positionne les enfants de son conteneur associé selon un ensemble de contraintes.

Comme nous le savons, chaque fenêtre de niveau supérieur est associée à une barre de menus. Cette barre de menus se compose de divers choix de menu disponibles pour l'utilisateur final. De plus, chaque choix contient une liste d'options, appelée menus déroulants. Les contrôles Menu et MenuItem sont une sous-classe de la classe MenuComponent.

Hiérarchie des menus

Commandes du menu

Sr.No. Classe et description
1 JMenuBar

L'objet JMenuBar est associé à la fenêtre de niveau supérieur.

2 JMenuItem

Les éléments du menu doivent appartenir à JMenuItem ou à l'une de ses sous-classes.

3 JMenu

L'objet JMenu est un composant de menu déroulant qui s'affiche à partir de la barre de menus.

4 JCheckboxMenuItem

JCheckboxMenuItem est la sous-classe de JMenuItem.

5 JRadioButtonMenuItem

JRadioButtonMenuItem est la sous-classe de JMenuItem.

6 JPopupMenu

JPopupMenu peut être pop-up dynamiquement à une position spécifiée dans un composant.

Les conteneurs font partie intégrante des composants SWING GUI. Un conteneur fournit un espace où un composant peut être localisé. Un conteneur dans AWT est un composant lui-même et il offre la possibilité d'ajouter un composant à lui-même. Voici certains points notables à considérer.

  • Les sous-classes de Container sont appelées Container. Par exemple, JPanel, JFrame et JWindow.

  • Le conteneur ne peut ajouter qu'un composant à lui-même.

  • Une disposition par défaut est présente dans chaque conteneur qui peut être remplacée à l'aide de setLayout méthode.

Conteneurs SWING

Voici la liste des conteneurs couramment utilisés lors de la conception de l'interface graphique à l'aide de SWING.

Sr.No. Conteneur et description
1 Panneau

JPanel est le conteneur le plus simple. Il fournit un espace dans lequel tout autre composant peut être placé, y compris d'autres panneaux.

2 Cadre

Un JFrame est une fenêtre de niveau supérieur avec un titre et une bordure.

3 La fenêtre

Un objet JWindow est une fenêtre de niveau supérieur sans bordures et sans barre de menus.