Utiliser un menu

Principes de base

Pour ajouter un menu à une application on utilise 3 classes :

Il faudra donc définir des écouteurs pour chaque élément de type MenuItem. Si l'application joue le rôle d'écouteur, elle devra implémenter l'interface ActionListener.

Exemple

fenêtre

Reprenons le composant LeDessin créé dans un précédent TD. Il dessine 20 carrés ou 20 cercles de positions, tailles et couleurs fixées au hasard. Il dispose des méthodes modeCercle et modeCarre, et il répond à la commande "Changer" en recalculant les positions, tailles et couleurs.

Nous allons créer une application qui affiche ce composant et permet de le gérer par l'intermédiaire d'un menu.

Construction du menu

Le menu sera construit dans le constructeur de l'application qui en outre contiendra un champ dessin de type LeDessin.

	public class AppCarre extends Frame 
	 implements ActionListener, WindowListener {

	 LeDessin dessin;
 
	 public AppCarre() {
	  MenuItem mi;
	  setTitle("H20");
	  addWindowListener(this);
	  dessin=new LeDessin();
	  add(dessin,BorderLayout.CENTER);
  
	  //construction du menu
	  MenuBar mb=new MenuBar();
	  setMenuBar(mb);  
  	  //menu Fichier
	  Menu m1=new Menu("Fichier");
	  mb.add(m1);
	  //item Quitter
	  mi=new MenuItem("Quitter");
	  mi.addActionListener(this);
	  m1.add(mi);
 	  //menu Edition 
	  Menu m2=new Menu("Edition");
	  mb.add(m2);
	  //item Cercles
	  mi=new MenuItem("Cercles");
	  mi.addActionListener(this);
	  m2.add(mi);
 	  //item Carrés
	  mi=new MenuItem("Carrés");
	  mi.addActionListener(this);
	  m2.add(mi);
  	  //séparateur
	  m2.addSeparator();
  	  //item Recalculer
	  mi=new MenuItem("Recalculer");
	  mi.setActionCommand("Changer");
	  //raccourci clavier pour cet item
	  mi.setShortcut(new MenuShortcut(KeyEvent.VK_K));
	  mi.addActionListener(dessin);
	  m2.add(mi);
	 }

La barre de menu contient deux menus déroulants : Fichier et Edition.

Le menu Fichier contient uniquement la commande Quitter qui permet de mettre fin au programme.

Le menu Edition contient les commandes Cercles et Carrés qui permettent de choisir le type de dessin désiré, un séparateur et la commande Recalculer.

Pour chaque item du menu on définit un écouteur grâce à la méthode addActionListener. Les items Cercles et Carrés envoient leurs commandes à l'application, l'item Recalculer s'adresse au composant dessin. Comme celui-ci réagit à la commande "Changer" nous avons utilisé la méthode setActionCommand pour redéfinir la commande par défaut qui est "Recalculer".

Enfin nous avons associé un raccourci clavier (combinaison Ctrl K) à la commande Recalculer en utilisant la méthode setShortcut.

Réaction aux commandes du menu

La réaction aux commandes du menu se fait dans la méthode actionPerformed.

	public void actionPerformed(ActionEvent e) {
	 if (e.getActionCommand().equals("Cercles")) 
	  dessin.modeCercle();
	 else if (e.getActionCommand().equals("Carrés"))
	  dessin.modeCarre();
	 else if (e.getActionCommand().equals("Quitter"))
	  System.exit(0);
	}

On ne fait pas référence à la commande Recalculer qui est déjà gérée par le composant dessin.

Méthode main

La méthode main construit une instance de la fenêtre de l'application et lui fixe une taille.

public static void main(String args[]) {
 System.out.println("Chargement en cours...");
 AppCarre fr=new AppCarre();
 fr.setBounds(50,100,300,300);
 fr.show();
}

La méthode setBounds permet de définir la position et la taille initiales de la fenêtre.

Pour terminer, il reste à écrire les méthodes liées à l'interface WindowListener de façon à gérer la case de fermeture de la fenêtre.



Retour au menu