La fenêtre d'une application constitue le support sur lequel il sera possible de construire une interface graphique complexe. Bien que le paquetage AWT comporte une classe Window, il sera préférable en raison des limitations de cette dernière d'utiliser la classe JFrame du paquetage Swing pour la création de la fenêtre principale d'une application.

La classe chargée de construire l'interface graphique de l'application peut hériter de la classe JFrame.

public class Application extends JFrame  ... 

L'instanciation de la classe JFrame peut être réalisée directement dans la méthode principale main() et utiliser le constructeur de la classe pour initialiser la fenêtre.

import javax.swing.*;
class Fenetre extends JFrame 
 public Fenetre() 
   super("Nom de la fenêtre"); // Appel du constructeur de JFrame
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   setVisible(true);
 

 public static void main(String[] arguments) 
   JFrame fen = new Fenetre();
 

Une autre solution consiste à déclarer l'instance de la classe JFrame en tant que variable globale statique de sorte à pouvoir utiliser directement l'objet dans la méthode main().

import javax.swing.*;
class Fenetre extends JFrame 
 static JFrame fen = new JFrame("Nom de la fenêtre");

 public static void main(String[] arguments) 
   fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   fen.setVisible(true);
 

La classe JFrame comprend plusieurs centaines de méthodes destinées à modifier les caractéristiques de la fenêtre. Il est possible par exemple de positionner l'objet sur l'écran, de le dimensionner, d'ajouter des composants, etc..

://java.sun.com/docs/books/tutorial/uiswing/components/panel.html

Une fenêtre JFrame comprend un certain nombre de couches superposées sur lesquelles des composants Swing peuvent être placés. En fait, l'objet JFrame doit posséder :

  • une couche principale JRootPane recouvrant la fenêtre,
  • un calque JLayeredPane s'imbriquant dans le JRootPane,
  • un panneau de contenu tel que JInternalFrame ou JPanel destiné à recevoir des composants,
  • un panneau transparent
import javax.swing.*;
class Fenetre extends JFrame 
   public Fenetre() 
       super("Nom de la fenêtre");
       setSize(300, 200);
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       setVisible(true);
   }

   public static void main(String[] arguments) 
      javax.swing.SwingUtilities.invokeLater(new Runnable() {
          public void run() {
              JFrame fen = new Fenetre();
          }
      });
   }