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 :