Classe JFrame

Elle permet de créer et de gérer des objets de type cadre ou fenêtre. En tant que conteneur, elle peut contenir d'autres composants d'interface tels que des boutons, des zones de saisie, ...

Constructeurs
Quelques methodes
Méthodes de la classe Component
Méthodes de la classe Window
Méthodes de la classe Frame
Principe de construction d'une fenêtre
La gestion des événements
Associer un menu à une JFrame
Exemple de code

Contructeurs

JFrame()
        // Crée une fenêtre invisible sans titre.
JFrame(String titre)
        // Crée une fenêtre invisible avec un titre.

Méthodes

JMenuBar getJMenuBar()
        // Renvoie la barre de menus de la fenêtre, ou null s'il n'y en a pas.

void setJMenuBar(JMenuBar mb)
        // Place la barre de menus mb dans la fenêtre.

Méthodes de la classe Component

La gestion des événements

La fermeture d'une JFrame est un des événements qu'il faut maitriser le plus rapidement possible, ne serait-ce que pour pouvoir fermer proprement la fenêtre que vous ouvrirez en testant votre programme.

Il faut rajouter un écouteur de fenêtre (window listener).

Le cadre créé doit implémenter l'interface WindowListener et ainsi fournir sept méthodes qui permettrons de manipuler les événements associés à un cadre :

public void windowActivated(WindowEvent e)
public void windowClosed(WindowEvent e)
public void windowClosing(WindowEvent e)
        // Fermeture du programme et de la machine virtuelle java
public void windowDeactivated(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowOpened(WindowEvent e)
Tous les événements ne nous intéressent pas forcement dans chaque application, la classe WindowAdapter permet de ne surcharger que les méthodes dont on a besoin.

Les éléments d'un menu

classe JMenuBar
        // Cette classe représente une barre de menu ou un groupe de menu.
        JMenuBar()   // Constructeur : crée une nouvelle barre de menus
        JMenu add(JMenu m)

classe JMenu
        // Cette classe représente un menu qui peut être inséré sur une barre de menu.
        JMenu()
        JMenu(String nomMenu)
        JMenu(String nomMenu, Boolean b)
        JMenu add(JMenuItem option)    // ajoute une option de menu
        JMenuItem add(String intitulé) // ajoute une option dans le menu
        void addSeparator(); // ajoute une ligne de séparation

classe JMenuItem
        // Chaque élément d'un menu est représenté par un objet MenuItem.
        JMenuItem()
        JMenuItem(String optionMenu)
        JMenuItem(Icon icône)
        JMenuItem(String optionMenu, Icon icône)    // option avec texte et image
        JMenuItem(String optionMenu, int mnemo)    // option avec texte et touche clavier

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

 class Fjframe extends JFrame implements ActionListener
 {  JPanel panel;
     JMenuBar mbar;
     JMenu m1;
     JMenu m2;

  public Fjframe()
    { setTitle("Test de JFrame");
       setSize(300,200);
       // gestion evenementielle de la fermeture de la fenêtre
       addWindowListener(new WindowAdapter()
           {public void windowClosing(WindowEvent e)
                  {System.exit(0);
                  }
             } ) ;
        // utilisation d'un toolkit pour l'affichage
        // d'une icone associée à la fenêtre
        Toolkit tk = Toolkit.getDefaultToolkit();
        Image JFrameIcon = tk.getImage("icon.gif");
        setIconImage(JFrameIcon);

        // insertion d'objets graphiques sur la fenêtre
        // à partir d'un panneau
        panel = new JPanel();

        Container contentPane = getContentPane();
        panel.setBackground(Color.blue);
        contentPane.add(panel);
        // Ajout d'une barre de menus à la fenêtre
        mbar = new JMenuBar();
        m1 = new JMenu("Couleur fond");
        JMenuItem m11 = new JMenuItem("Jaune");
        m11.addActionListener(this); // installation d'un écouteur d'action
        m1.add(m11);  // ajout d'une option à un menu
        JMenuItem m12 = new JMenuItem("Rouge");
        m12.addActionListener(this);
        m1.add(m12);
        m2 = new JMenu("Couleur menu");
        JMenuItem m21 = new JMenuItem("Bleu");
        m21.addActionListener(this);
        m2.add(m21);
        JMenuItem m22 = new JMenuItem("Vert");
        m22.addActionListener(this);
        m2.add(m22);
        mbar.add(m1);  // ajout de menus à la barre de menus
        mbar.add(m2);
        setJMenuBar(mbar);
     }

  public void actionPerformed(ActionEvent evt)
    {  if (evt.getSource()instanceof JMenuItem) 
             // gestion des événements liés aux menus
            { String ChoixOption = evt.getActionCommand();
               if (ChoixOption.equals("Jaune"))panel.setBackground(Color.yellow);
               else if (ChoixOption.equals("Rouge"))panel.setBackground(Color.red);
               else if (ChoixOption.equals("Bleu"))
                              {mbar.setBackground(Color.blue);
                                m1.setBackground(Color.blue);
                                m2.setBackground(Color.blue);
                              } 
               else if (ChoixOption.equals("Vert"))
                             {mbar.setBackground(Color.green);
                               m1.setBackground(Color.green);
                               m2.setBackground(Color.green);
                              };
               };
     }
 }

 public class TestFjframe
 { public static void main(String[] args)
    {JFrame f =new Fjframe();
     f.show();
     }
 }

Fenêtre de base et, après sélection d'une couleur de fond et une couleur pour la barre de menu et ses menus