Utilisation d'un menu contextuel

     

alt : l'applet n'est pas visible par votre navigateur (dans le menu Outils, Modules complémentaires, activer le plugin Java(TM) Platform SE 6 U32 6.0.320.5 s'il est désactivé)

Cliquez dans l'applet, vous verrez apparaître un menu appelé menu contextuel, menu surgissant qui vous permet de choisir entre deux possibilités pour le dessin.

Voici le code d'une application faisant surgir une fenêtre correspond à peu près à l'applet vue ici. L'application possède quelques possibilités supplémentaires. Il est possible de faire apparaître un menu surgissant qui permet de choisir la forme du dessin (un soleil i.e. un disque ou bien une lune) ; ce menu surgit lorsque l'on clique avec la souris (ici avec le bouton de gauche), au point du clic ; le menu surgissant dispose d'un groupe de boutons à cocher.

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.ButtonGroup;


class Ardoise extends JPanel {
boolean lune = false;

Ardoise() {
final MenuContextuel menuContextuel = new MenuContextuel(this);
setPreferredSize(new Dimension(200, 200));
setBackground(Color.BLUE);
setForeground(Color.YELLOW);
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (SwingUtilities.isRightMouseButton(e)) {
menuContextuel.show(e.getComponent(),e.getX(), e.getY());
}
}
});
}

public void setLune(boolean valeur) {
lune = valeur;
repaint();
}

public void paintComponent(Graphics g) {
int largeur = getWidth();
int hauteur = getHeight();

super.paintComponent(g);
g.fillOval(largeur/2 - 50, largeur/2 - 50, 100, 100);
if (lune) {
g.setColor(getBackground());
g.fillOval(largeur/2-25, largeur/2-25, 100, 100);
}
}
}


// pour le menu contextuel
class MenuContextuel extends JPopupMenu implements ItemListener {
Ardoise ardoise;

MenuContextuel(Ardoise ardoise) {
this.ardoise = ardoise;
ButtonGroup groupeFormes = new ButtonGroup();

JCheckBoxMenuItem itemBoite = new JCheckBoxMenuItem("soleil", true);
itemBoite.addItemListener(this);
groupeFormes.add(itemBoite);
add(itemBoite);

itemBoite = new JCheckBoxMenuItem("lune", false);
itemBoite.addItemListener(this);
groupeFormes.add(itemBoite);
add(itemBoite);
}

public void itemStateChanged(ItemEvent e) {
JMenuItem item = (JMenuItem)(e.getSource());
String texte = item.getText();

if (texte.equals("soleil")) ardoise.setLune(false);
else if (texte.equals("lune")) ardoise.setLune(true);
}
}


public class AvecMenuContextuel extends JFrame {
AvecMenuContextuel() {
Ardoise ardoise = new Ardoise();

add(ardoise, BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(100, 100);
pack();
setVisible(true);
}
}

class EssaiAvecMenuContextuel extends JFrame {
public static void main(String[] arg) {
new AvecMenuContextuel();
}
}

Vous pouvez voir :

  • le code de l'application décrite ici.
  • le code de l'applet
    JCheckBoxMenuItem itemBoite = new JCheckBoxMenuItem("soleil", true); : la classe javax.swing.JCheckBoxMenuItem modélise un item d'un menu déroulant qui est un bouton à cocher. Ici, ce bouton porte le nom de "soleil" et sera coché au départ.
    JPopupMenu : la classe javax.swing.JPopupMenu modélise un menu contextuel.
    addMouseListener(new MouseAdapter()... : cette instruction sert à ajouter un listener à la fenêtre pour intercepter l'événement du clic de l'utilisateur souhaitant disposer du menu surgissant.

    ©Irène Charon, Télécom ParisTech 2011